leetcode.排序.215数组中的第k个最大元素-Java
2024-10-07 15:58:06
1. 具体题目
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 : 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5
2. 思路分析
方法一:最直接的方法是直接调用 Java 的排序方法 Arrays.sort,排序算法为快速排序,时间复杂度O(nlogn)
方法二:利用堆排序算法,维护一个大小等于 k 的小顶堆,最后取堆顶元素即可,可借助 Java 的数据结构 PriorityQueue(有序队列)
方法三:基于切分的快速选择,由于每次切分后都返回切分点下标值,所以可以找到下标为目标值的切分点,返回该切分点元素。
3. 代码
快速选择代码:
public int findKthLargest(int[] nums, int k) {
int target = nums.length - k;
int l = 0, h = nums.length - 1;
while(l < h){
int index = partition(nums, l, h);
if(target > index){
l = index + 1;
}else if(target < index){
h = index - 1;
}else{
return nums[target];
}
}
return nums[target];
}
//切分算法
private int partition(int[] nums, int l, int h){
int flag = nums[l];
while(l < h){
while(nums[h] >= flag && l < h) h--;
swap(nums, l, h);
while(nums[l] <= flag && l < h) l++;
swap(nums, l, h);
}
return l;
}
//元素交换
private void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
最新文章
- mybatis关联映射
- Delphi面向对象的可见性表示符
- SQL in查询
- 【python cookbook】【字符串与文本】5.查找和替换文本
- xcode7中使用cocos2d-x3.8的webview控件
- 【大数据安全】基于Kerberos的大数据安全验证方案
- nginx基础
- windows 为qt5.7.1 安装openssl
- lua 中随机数产生
- 关于MVC RouteExistingFiles疑问后续
- dangerouslySetInnerHTMl
- hadoop 视频教程3之实战教程
- Java实现策略模式的简单应用
- 纯css实现不固定行数的文本在一个容器内垂直居中
- 在hibernate中查询单个对象的方法,get()、load()、
- CodeForces 834D The Bakery(线段树优化DP)
- Jsoup学习总结
- python学习笔记--变量和运算符
- 【spring mvc】spring mvc POST方式接收单个字符串参数,不加注解,接收到的值为null,加上@RequestBody,接收到{";uid";:";品牌分类大”},加上@RequestParam报错 ---- GET方式接收单个参数的方法
- jQuery选择器之表单元素选择器