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

数组中的第K个最大元素 ---- 分治-快排

题目链接

题目:

分析:

  • 这道题很明显是一个top-K问题, 我们很容易想到用堆排序来解决, 堆排序的时间复杂度是O(N*logN), 不符合题意, 所以我们可以用另一种方法:快速选择算法, 他的时间复杂度为O(N)
  • 快速选择算法, 其实是基于快排, 进行修改而成, 我们还是使用将"将数组分成三块" 的方法来实现快排排序数组 ---- 分治-快排-CSDN博客
  • 此时我们每一块的元素个数分别设为a b c
  • 情况一: 如果第k个最大元素落在>key的区间, 说明此时c一定是>=k的, 此时只需要去[right, r]区间去找第k个最大元素即可
  • 情况二: 如果第k个最大元素落在=key的区间, 那么b+c一定是>=k的, 此时只需要返回key即可, 因为这个区间都是key
  • 情况三: 如果不是上述两种情况, 那么第k个最大元素一定落在<key的区间, , 此时需要去[l, left]区间去找, 但是我们要找的是第k-b-c大的元素, 因为我们舍去了=key和>key的区间

代码:

class Solution {public int findKthLargest(int[] nums, int k) {return qsort(nums, 0, nums.length - 1, k);}public int qsort(int[] nums, int l, int r, int k) {if (l == r)return nums[l];int key = nums[new Random().nextInt(r - l + 1) + l];int left = l - 1;int right = r + 1;int i = l;while (i < right) {if (nums[i] < key) {swap(nums, i++, ++left);} else if (nums[i] == key) {i++;} else {swap(nums, i, --right);}}// [l,left] [left + 1, right - 1] [right, r]int c = r - right + 1;int b = right - left - 1;if (c >= k)return qsort(nums, right, r, k);else if (b + c >= k)return key;elsereturn qsort(nums, l, left, k - b - c);}public void swap(int[] nums, int i, int j) {int t = nums[i];nums[i] = nums[j];nums[j] = t;}
}
http://www.lryc.cn/news/366261.html

相关文章:

  • 函数或变量 ‘tfrstft‘ 无法识别
  • 在推荐四款软件卸载工具,让流氓软件无处遁形
  • 「前端+鸿蒙」核心技术HTML5+CSS3(十一)
  • 【高频】如何优化一个SQL语句
  • Oracle EBS AP发票创建会计科目提示:APP-SQLAP-10710:无法联机创建会计分录
  • T-Pot多功能蜜罐实践@debian12@FreeBSD
  • Sed流编辑器总结
  • 智合同丨AIGC如何助力合同智能应用
  • CSRF 令牌的生成过程和检查过程
  • 计算机网络学习记录 网络层 Day4(下)
  • 3、前端本地环境搭建
  • Python爬取城市空气质量数据
  • 【MyBatisPlus条件构造器】
  • 容器多机部署eureka及相关集群服务出现 Request execution failed with message: AuthScheme is null
  • Qt Graphics View Framework 使用教程
  • 【调试笔记-20240606-Linux-为 OpenWrt 的 nginx 服务器添加Shell CGI 支持】
  • flink实战--⼤状态作业调优实践指南-Flink SQL 作业篇
  • 数据结构:顺序串
  • 掌握复选框(Checkbox)的奥秘:全选与反选功能实现
  • 一篇文章带你搞懂C++引用(建议收藏)
  • 查询SQL:文章浏览1
  • android 在onCreate方法中获得view的宽高
  • SOA主要协议和规范
  • 30、matlab现代滤波:维纳滤波/LMS算法滤波/小波变换滤波
  • HTML5 视频 Vedio 标签详解
  • 三十五篇:数字化转型的引擎:赋能企业的ERP系统全景
  • 利用ArcGIS对长江三角洲地区的gdp水平进行聚类
  • 释放视频潜力:Topaz Video AI for mac/win 一款全新的视频增强与修复利器
  • MongoDB 正则表达式详解:高效数据查询与处理技巧
  • 第二十六章HTML与CSS书写规范