leetcode 912. 排序数组

embedded/2025/2/28 6:33:07/

912. 排序数组

  • 912. 排序数组

题目

给你一个整数数组 nums,请你将该数组升序排列。
你必须在 不使用任何内置函数 的情况下解决问题,时间复杂度为 O(nlog(n)),并且空间复杂度尽可能小。
示例 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 <= nums.length <= 5 * 104
-5 * 104 <= nums[i] <= 5 * 104

题解

  • 接收一个数组 nums,通过计数排序的方法对数组进行排序,并返回排序后的新数组 newArr
  • 时间复杂度: O(n+k)

    找出最大值和最小值的循环遍历了数组 nums 一次,时间复杂度为O(n) ,其中 n是数组 nums 的长度。
    统计元素出现次数的循环也遍历了数组 nums 一次,时间复杂度为O(n) 。
    根据计数数组重建排序后的数组的循环遍历了计数数组 arr 一次,时间复杂度为O(k) ,其中k是计数数组的长度(k=max - min +1)。
    总的时间复杂度为O(n+k)。

/*** @param {number[]} nums* @return {number[]}*/
var sortArray = function (nums) {// 找最大最小值let max = 0;let min = 0;for (let i = 0; i < nums.length; i++) {max = max > nums[i] ? max : nums[i];min = min < nums[i] ? min : nums[i];}const newArr = [];// 初始化数组长度为参数长度const arr = new Array(max - min + 1).fill(0);// 统计每一个值出现的次数for (let i = 0; i < nums.length; i++) {let arrIndex = nums[i] - min;if (arr[arrIndex] !== undefined) {arr[arrIndex] += 1;} else {arr[arrIndex] = 1;}}// 把有值的数据放到新数组里for (let i = 0; i < arr.length; i++) {const list = new Array(arr[i]).fill(min + i);newArr.push(...list);}return newArr;
};

http://www.ppmy.cn/embedded/167740.html

相关文章

子进程的创建 ─── linux第10课

目录 进程 内核数据结构代码和数据 fork 创建子进程 ​编辑 创建多进程 理解子进程的创建(总结) 进程 内核数据结构代码和数据 一个进程只有一个唯一父进程,但可以拥有多个子进程,因此进程是树形结构. fork 创建子进程 父子进程代码共享,数据各自私有的原因 因为数据私…

DeepSeek 助力 Vue3 开发:打造丝滑的下拉选择框(Dropdown Select)

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片

【DeepSeek】-macOS本地终端部署后运行DeepSeek如何分析图片 根据您的需求&#xff0c;目前需要了解以下几个关键点及分步解决方案&#xff1a; --- 一、现状分析 1. Ollama 的限制&#xff1a; - 目前Ollama主要面向文本大模型&#xff0c;原生不支持直接上传/处理图片 …

2024 年 6 月青少年软编等考 C 语言四级真题解析

目录 T1. 人以群分思路分析T2. 那就别担心了思路分析T3. 凑零钱思路分析T4. 拼题 A 打卡奖励思路分析T1. 人以群分 社交网络中我们给每个人定义了一个 “活跃度”,现希望根据这个指标把人群分为两大类,即外向型( o u t g o i n g outgoing outgoing,即活跃度高的)和内向型…

现在集成大模型的IDE,哪种开发效率最高

目录 1. Visual Studio Code GitHub Copilot 2. JetBrains IDE&#xff08;IntelliJ/PyCharm等&#xff09; Copilot/Codeium 3. Cursor 4. 云IDE&#xff08;GitHub Codespaces / Replit&#xff09; 5. Amazon CodeWhisperer 效率对比与选择建议 未来趋势 1. Visual …

Linux提权之docker提权(十三) 链接第八篇完整版

书接上回 实验环境一样的 第八篇 我们用ssh密钥登陆后 发现我们web1的权限 当我们拿到web1的权限时 我们无法提权(这里我用的继续十二的环境 大家也可以继续) 所以我们首先要提权(当然必须是一个完整的 tty shell 不会的 我们去看第二篇 当然我下边也给你表注明了) python3…

进程 ─── linux第10课

目录 回顾上一节 进程 基本概念 描述进程 - PCB task_struct - PCB的一种 task_ struct内容分类 组织进程 下面来介绍task_struct内部 PID 和PPID 子进程与父进程 getpid()和getppid() 杀进程 exe 和 cwd 回顾上一节 1. 如果我们写的程序要访问硬件,必定通过sy…

远程办公2.0:从“被迫适应”到“主动进化”的未来工作革命

远程办公2.0时代&#xff1a;从“被迫适应”到“主动进化”的未来工作革命 ——前沿技术与趋势预测全解析 引言&#xff1a;一场不可逆的全球工作革命 2020年的一场疫情&#xff0c;让全球职场人第一次大规模体验了远程办公的“生存模式”&#xff0c;而五年后的今天&#xff…