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

【 每天学习一点算法 2026/03/23】数组中的第K个最大元素

每天学习一点算法 2026/03/23

题目:数组中的第K个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

  1. 最简单的方法就是先排序然后取第 k - 1 个元素

    functionfindKthLargest(nums:number[],k:number):number{returnnums.sort((a,b)=>b-a)[k-1]};
  2. 上面的方法取决于排序算法的时间复杂度肯定不是我们想要的,我们可以利用快速排序方法来解决这个问题

    快速排序的关键在于选取一个基准值,然后将 大于 和 小于 基准值数放在两个数组中,然后在递归传递这两个数组,继续选取基准值分割,直到完成排序。

    • 假如 基准值 左边元素个数小于 k - 1,那么需要在右边的数组中寻找新的基准值
    • 假如 基准值 左边元素个数大于 k - 1,那么需要在左边的数组中寻找新的基准值
    • 假如 基准值 左边刚好有 k - 1 元素,那么这个基准值就是第 k 大的元素
    functionfindKthLargest(nums:number[],k:number):number{if(nums.length===1)returnnums[0];// 只有一项直接返回constbase=nums[Math.floor(Math.random()*nums.length)];// 随机基准值constleft:number[]=[]constright:number[]=[]constequal:number[]=[]// 利用基准值分割数组for(constitemofnums){if(item<base){right.push(item)}elseif(item>base){left.push(item)}else{equal.push(item)}}if(left.length===k-1){// 值大于 base 的值刚好有 k - 1 个,那么 base 就是第 k 大的元素returnbase}elseif(left.length>k-1){// 值大于 base 的值大于 k - 1 个, 那么第 k 大的元素在 left 内returnfindKthLargest(left,k)}else{// 值大于 base 的值小于 k - 1 个if(left.length+equal.length>=k){// 值在 equal 内直接返回 basereturnbase}else{// 值在 right 内(k 值记得要减去 equal 的长度)returnfindKthLargest(right,k-left.length-equal.length)}}};
  3. 因为题目中数字有边界-10000 <= nums[i] <= 10000,所以我们可以利用计数排序的方法来寻找。

    functionfindKthLargest(nums:number[],k:number):number{constarr=newArray(20001).fill(0)// 用于统计数字频率constoffset=10000// 因为有负数我们添加一个偏移量for(letnumofnums){// 将数字转换成arr数字的下标,对应元素表示出现频次arr[num+offset]++}for(leti=20001;i>=0;i--){// 遍历 arr 数组if(arr[i]>0){// 如果遇到出现的数字,就用 k 减去出现的频次k-=arr[i]}if(k<=0){// k 小于等 0 表示这就是第 k 大的数字returni-offset}}};

题目来源:力扣(LeetCode)

http://www.jsqmd.com/news/522531/

相关文章:

  • 手把手教你用xdbg绕过易语言软件验证(含反调试应对方案)
  • KeypadLatest:轻量级嵌入式矩阵键盘轮询驱动库
  • 阿里小云KWS模型多语言支持方案:英语唤醒词训练指南
  • AudioSeal Pixel Studio详细步骤:临时缓存清理机制与音频安全生命周期管理
  • Orcad PCB设计必备:字符标注与图片插入的5个高效技巧(附常见问题解决)
  • 告别救火式运维:手把手教你用PPMTC框架搭建可持续的IT服务管理体系
  • useEffect 依赖数组写错,组件无限循环了
  • 30元搞定nRF52840最小系统:手把手教你低成本DIY低功耗蓝牙开发板
  • STM32 进阶封神之路(二十四):低功耗实战全攻略 —— 电池供电传感器节点(RTC 唤醒 + DHT11 采集 + 功耗优化)
  • 深入解析Halcon中hom_vector_to_proj_hom_mat2d算子的应用与优化
  • STM32 Modbus RTU DMA驱动:高可靠RS485通信实现
  • 2026年电动吊篮租赁厂家TOP5汇总:五大合规与实力双优企业! - 深度智识库
  • CentOS 7.9下Nginx 1.28.0源码编译避坑指南:从依赖安装到服务配置全流程
  • Phi-3 Forest Laboratory 创意编程:使用Processing进行交互式艺术创作
  • 计算机毕业设计:Python协同过滤图书推荐系统 豆瓣图书 爬虫 可视化 矩阵分解 数据分析 大数据(建议收藏)✅
  • FastAPI 实战进阶:从零构建高性能用户认证与数据交互API
  • 企业技术落地可靠性设计要点拆解:从组件到运维全流程
  • 2024-11-20 NO.1 Quest3 开发者模式开启与激活避坑指南
  • 盘点潍坊KK模组生产厂排名,选出值得推荐的十大厂家 - myqiye
  • 2026年高空车租赁TOP5厂家:合规化时代下设备租赁服务的关键 - 深度智识库
  • 寻音捉影·侠客行惊艳成果:法律文书宣读录音中100%捕获全部‘不可抗力’表述
  • MT5 Zero-Shot效果惊艳展示:古诗文白话改写、方言转标准语、缩略语展开
  • Arduino嵌入式Map库:轻量级键值存储实现
  • 63:Deepfake深伪演讲技术:GAN生成对抗网络与面部交换
  • 2026年河北代写标书公司推荐,吾魏咨询服务质量如何盘点 - mypinpai
  • 2026年升降平台租赁厂家分析:西安丰顺安以“本地化合规化”突围? - 深度智识库
  • 剖析2026年安徽公务员笔试专业辅导机构,考德上优势在哪 - 工业品网
  • 分析2026年PMI银泰科技可持续发展能力,吉安地区选哪家 - 工业品牌热点
  • 手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)
  • Python多线程并发:解锁GEE本地高速批量下载新姿势(告别网盘龟速,效率提升百倍)