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

最新文章

  1. mybatis关联映射
  2. Delphi面向对象的可见性表示符
  3. SQL in查询
  4. 【python cookbook】【字符串与文本】5.查找和替换文本
  5. xcode7中使用cocos2d-x3.8的webview控件
  6. 【大数据安全】基于Kerberos的大数据安全验证方案
  7. nginx基础
  8. windows 为qt5.7.1 安装openssl
  9. lua 中随机数产生
  10. 关于MVC RouteExistingFiles疑问后续
  11. dangerouslySetInnerHTMl
  12. hadoop 视频教程3之实战教程
  13. Java实现策略模式的简单应用
  14. 纯css实现不固定行数的文本在一个容器内垂直居中
  15. 在hibernate中查询单个对象的方法,get()、load()、
  16. CodeForces 834D The Bakery(线段树优化DP)
  17. Jsoup学习总结
  18. python学习笔记--变量和运算符
  19. 【spring mvc】spring mvc POST方式接收单个字符串参数,不加注解,接收到的值为null,加上@RequestBody,接收到{&quot;uid&quot;:&quot;品牌分类大”},加上@RequestParam报错 ---- GET方式接收单个参数的方法
  20. jQuery选择器之表单元素选择器

热门文章

  1. 【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
  2. Mac版Navicat Premium激活教程
  3. Spring Cloud Contract简介
  4. openstack创建一个虚拟机的过程
  5. java 字符串获取
  6. torchvision.transforms模块介绍
  7. CentOS7.5常用命令
  8. 在windows的文件添加右键&quot;命令提示符&quot;菜单
  9. Codeforces 499C:Crazy Town(计算几何)
  10. boost compressedPair