当前位置: 首页 > news >正文

leetcode 912. 排序数组

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;
};

相关文章:

  • 【Eureka 缓存机制】
  • 【大模型+知识图谱】大模型与知识图谱融合:技术演进、实践应用与未来挑战
  • ue5 3dcesium中从本地配置文件读取路3dtilles的路径
  • Module-info.java文件
  • Java 接口与实现类:为什么接口不能直接创建对象?
  • 数据库导出
  • 【2】VS Code 新建上位机项目---C#面向对象编程
  • IDEA中.gitignore未忽略指定文件的问题排查与解决
  • J-LangChain,用Java实现LangChain编排!轻松加载PDF、切分文档、向量化存储,再到智能问答
  • 【含文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现
  • YOLOv8+QT搭建目标检测项目
  • 推荐3个背景渐变色的wordpress主题
  • 深度生成模型(一)——具身智能综述与算法分类简介
  • 一劳永逸解决vsocde模块import引用问题
  • smolagents学习笔记系列(番外一)使用DeepSeek API Key + CodeAgent
  • 有没有什么免费的AI工具可以帮忙做简单的ppt?
  • 串口解析的服务器流程优化
  • javaweb文件上传:@MultipartConfig注解与Apache Commons FileUpload对比
  • 建筑兔零基础自学python记录32|学过的函数代码记录19-25
  • 判断一个文件中以三个#号开头有多少行的shell脚本怎么写
  • 马上评|中药液涉嫌添加安眠药?药品安全儿戏不得
  • 水果预包装带来的环境成本谁来分担?
  • 中科院合肥物质院迎来新一届领导班子:刘建国继续担任院长
  • 墨西哥海军一载两百余人帆船撞上纽约布鲁克林大桥,多人落水
  • 专访|《内沙》导演杨弋枢:挽留终将失去的美好
  • 上海虹桥国际咖啡文化节开幕,推出茶咖文化特色街区、宝妈咖啡师培训