【LeetCode每日一题】——912.排序数组

server/2024/11/9 17:08:26/

文章目录

  • 一【题目类别】
  • 二【题目难度】
  • 三【题目编号】
  • 四【题目描述】
  • 五【题目示例】
  • 六【题目提示】
  • 七【解题思路】
  • 八【时间频度】
  • 九【代码实现】
  • 十【提交结果】

一【题目类别】

二【题目难度】

  • 中等

三【题目编号】

四【题目描述】

  • 给你一个整数数组 nums,请你将该数组升序排列。

五【题目示例】

  • 示例 1:

    • 输入:nums = [5,2,3,1]
    • 输出:[1,2,3,5]
  • 示例 2:

    • 输入:nums = [5,1,1,2,0,0]
    • 输出:[0,0,1,1,2,5]

六【题目提示】

  • 1 < = n u m s . l e n g t h < = 5 ∗ 1 0 4 1 <= nums.length <= 5 * 10^4 1<=nums.length<=5104
  • − 5 ∗ 1 0 4 < = n u m s [ i ] < = 5 ∗ 1 0 4 -5 * 10^4 <= nums[i] <= 5 * 10^4 5104<=nums[i]<=5104

七【解题思路】

  • 这道题没什么需要解释的,基础知识
  • 即使用堆排序完成对目标数组的排序
  • 具体细节可以参考下面的代码

八【时间频度】

  • 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn) n n n为传入的参数大小
  • 空间复杂度: O ( n ) O(n) O(n) n n n为传入的参数大小

九【代码实现】

  1. Java语言版
class Solution {public int[] sortArray(int[] nums) {// 初始化小顶堆int[] heap = new int[nums.length + 1];int[] heapSize = {0};// 使用小顶堆排序数组for (int i = 0; i < nums.length; i++) {push(heap, heapSize, nums[i]);}int[] res = new int[nums.length];for (int i = 0; i < nums.length; i++) {res[i] = top(heap);pop(heap, heapSize);}// 返回结果return res;}// 交换数据public void swap(int[] heap, int a, int b) {int temp = heap[a];heap[a] = heap[b];heap[b] = temp;}// 向小顶堆中插入元素public void push(int[] heap, int[] heapSize, int x) {heap[++heapSize[0]] = x;for (int i = heapSize[0]; i > 1 && heap[i] < heap[i >> 1]; i >>= 1) {swap(heap, i, i >> 1);}}// 弹出小顶堆的堆顶元素public void pop(int[] heap, int[] heapSize) {heap[1] = heap[heapSize[0]--];int temp = heap[1];int i = 1;int j = 2;while (j <= heapSize[0]) {if (j != heapSize[0] && heap[j + 1] < heap[j]) {j++;}if (heap[j] < temp) {heap[i] = heap[j];i = j;j = i << 1;}else{break;}}heap[i] = temp;}// 返回小顶堆的堆顶元素值public int top(int[] heap) {return heap[1];}}
  1. Python语言版
class Solution:def sortArray(self, nums: List[int]) -> List[int]:# 初始化小顶堆heap = [0]heap_size = [0]# 使用小顶堆排序数组for num in nums:self.push(heap, heap_size, num)res = []for _ in range(len(nums)):res.append(self.top(heap))self.pop(heap, heap_size)# 返回结果return resdef swap(self, heap, a, b):"""交换数据"""heap[a], heap[b] = heap[b], heap[a]def push(self, heap, heap_size, x):"""向小顶堆中插入元素"""heap.append(x)heap_size[0] += 1i = heap_size[0]while i > 1 and heap[i] < heap[i >> 1]:self.swap(heap, i, i >> 1)i >>= 1def pop(self, heap, heap_size):"""弹出小顶堆的堆顶元素"""heap[1] = heap[heap_size[0]]heap_size[0] -= 1temp = heap[1]i = 1j = 2while j <= heap_size[0]:if j != heap_size[0] and heap[j + 1] < heap[j]:j += 1if heap[j] < temp:heap[i] = heap[j]i = jj = i << 1else:breakheap[i] = tempdef top(self, heap):"""返回小顶堆的堆顶元素值"""return heap[1]
  1. C语言版
/*** Note: The returned array must be malloced, assume caller calls free().*/// 交换数据
void swap(int *a, int *b)
{int temp = *a;*a = *b;*b = temp;
}// 向小顶堆中插入元素
void push(int *heap, int *heapSize, int x)
{heap[++(*heapSize)] = x;for (int i = (*heapSize); i > 1 && heap[i] < heap[i >> 1]; i >>= 1){swap(&heap[i], &heap[i >> 1]);}
}// 弹出小顶堆的堆顶元素
void pop(int *heap, int *heapSize)
{heap[1] = heap[(*heapSize)--];int temp = heap[1];int i = 1;int j = 2;while (j <= (*heapSize)){if (j != (*heapSize) && heap[j + 1] < heap[j]){j++;}if (heap[j] < temp){heap[i] = heap[j];i = j;j = i << 1;}else{break;}}heap[i] = temp;
}// 返回小顶堆的堆顶元素值
int top(int *heap)
{return heap[1];
}int* sortArray(int* nums, int numsSize, int* returnSize)
{// 初始化小顶堆int* heap = (int*)malloc(sizeof(int) * (numsSize + 1));int heapSize = 0;// 使用小顶堆排序数组for (int i = 0; i < numsSize; i++){push(heap, &heapSize, nums[i]);}int* res = (int*)malloc(sizeof(int) * numsSize);for (int i = 0; i < numsSize; i++){res[i] = top(heap);pop(heap, &heapSize);}// 返回结果*returnSize = numsSize;free(heap);return res;
}

十【提交结果】

  1. Java语言版
    在这里插入图片描述

  2. Python语言版
    在这里插入图片描述

  3. C语言版
    在这里插入图片描述


http://www.ppmy.cn/server/115721.html

相关文章

彻底解读云呼叫中心系统,企业客户服务必备

在瞬息万变的现代商业环境中&#xff0c;客户服务的重要性日益凸显&#xff0c;云呼叫中心系统作为其前沿的代表&#xff0c;正成为众多企业追逐的新宠。本文旨在全面解读云呼叫中心系统&#xff0c;帮助企业和读者更好地理解其运作模式、技术优势及未来发展趋势。 一、云呼叫中…

DoubletFinder去除双细胞分析学习

在单细胞RNA测序过程中&#xff0c;有时两个或多个细胞可能在制备过程中意外结合成一个单一的"假细胞"&#xff0c;称为双峰细胞或双倍体。这些双峰细胞可能会扭曲数据分析和解释&#xff0c;因此&#xff0c;需要使用一些方法对它们进行识别和剔除。其中DoubletFind…

iPhone的安全模式如何操作

iPhone安全模式的进入方法 简介 iPhone的安全模式是一个特殊的系统状态&#xff0c;主要用于在设备出现问题时进行故障排除。在此模式下&#xff0c;第三方应用程序和服务通常会被禁用&#xff0c;只允许系统自带的应用运行&#xff0c;从而帮助用户定位和解决问题。以下是详…

一维数组 list 呢 ,怎么转换成 (批次 句子长度 特征值 )三维向量 python pytorch lstm 编程 人工智能

一、介绍 对于一维数组&#xff0c;如果你想将其转换成适合深度学习模型&#xff08;如 LSTM&#xff09;输入的格式&#xff0c;你需要考虑将其扩展为三维张量。这通常涉及到批次大小&#xff08;batch size&#xff09;、序列长度&#xff08;sequence length&#xff09;和…

ios 项目中设置左侧徽标

// // CategoryViewController.m // scxhgh // // Created by xmkjsoft on 2024/7/16. // #import "CategoryViewController.h" #import "SideMenuViewController.h" // 引入侧边栏控制器的头文件 #import "NavigationBarUtils.h" int…

python 打包exe并附加dll和自定义ico

#打包成一个exe文件 并且去掉黑窗口 并增加dll和ico图标 pyinstaller --windowed --onefile --add-binary "mt_32.dll;." --icon128favicon.ico login.py路径位置 程序加载 dll None # 初始化变量# 之后的代码中正确地给dll赋值dll_path ././test.dll # 相对路…

价值流:从理论框架到实践落地的系统化指南

价值流如何从理论转化为实践中的企业增长引擎 随着全球化和数字化进程的加快&#xff0c;企业面临的竞争压力日益加剧。如何在竞争激烈的市场中立足并实现持续增长&#xff0c;已经成为每一个企业管理者需要面对的重要议题。作为一种强调客户价值创造的工具&#xff0c;《价值…

【大数据算法】一文掌握大数据算法之:空间亚线性算法。

空间亚线性算法 1、空间亚线性算法1.1 定义1.2 核心原理1.2.1 数据流模型1.2.2 随机化技术1.2.3 哈希技术 1.3 应用场景1.4 算法公式1.5 代码示例 2、总结 1、空间亚线性算法 1.1 定义 空间亚线性算法是指在处理大数据时&#xff0c;其所需的空间复杂度小于输入数据规模的线性…