在未排序的数组中找到第 k 个最大的元素。
链接: leetcode.

解题思路:通过快速排序的思想方法,每次随机获取指定范围内一个树的排序位置,然后根据这个位置,再重新指定范围,直到这个位置索引满足K。

class Solution {
public int findKthLargest(int[] nums, int k) {
int n = nums.length;
int left = 0, right = n - 1;
// 将数组分为两个部分,获取一个正确序号的位置
int index = part(nums, left, right);
k = n - k;
while(index != k) {
if(index > k) {
right = index - 1;
}else {
left = index + 1;
}
index = part(nums, left, right);
} return nums[k];
} public int part(int[] nums, int l, int r) {
if(l >= r) return l; int i = l, j = r;
// 选取第一个数为比较值
int x = nums[l];
while(i != j) {
// 这里需要让j先--,因为必须保证i的数值是在正确的位置。
while(i < j && nums[j] > x) j--;
while(i < j && nums[i] <= x) i++;
if(i < j) swap(nums, i, j);
} // 将比较值放到正确的位置
nums[l] = nums[i];
nums[i] = x;
// 范围比较值的排序位置
return i;
} public void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
} }

最新文章

  1. JavaScript随笔1
  2. atititt.java定时任务框架选型Spring Quartz 注解总结
  3. 台大《机器学习基石》课程感受和总结---Part 1(转)
  4. ubuntu apt-get update 失败解决
  5. LINUX下 Udev详解
  6. javascript倒置再次被否定作用
  7. 【爬虫入门手记03】爬虫解析利器beautifulSoup模块的基本应用
  8. 计数排序(O(n+k)的排序算法,空间换时间)
  9. swift 密码由6-16数字和字母组合组成
  10. 把流的形式转化为Base64
  11. sitecore开发入门之如何在代码中获取SITECORE图像URL
  12. C# 中使用log4.net的注意事项
  13. MUI 打包android app
  14. Glusterfs挂载报错解决办法
  15. P1297 [国家集训队]单选错位(期望)
  16. Html Agility Pack解析Html(C#爬虫利器)
  17. sql loader 控制文件使用十六进制分隔符
  18. Git提交空文件夹的技巧
  19. 在浏览器中使用JS打开并展示PDF文件
  20. socket 和 webscoket 的区别

热门文章

  1. C++调用Go方法的字符串传递问题及解决方案
  2. Linux (操作二)
  3. 02、Hibernate开发步骤
  4. 详解在Word文档中常见的各种公式编辑问题
  5. 早安打工人! 来把你的.NET程序模块化吧
  6. Linux(CentOS 7下httpd的安装)
  7. Forethought Future Cup - Final Round (Onsite Finalists Only) C. Thanos Nim 题解(博弈+思维)
  8. D. Numbers on Tree(构造)【CF 1287】
  9. 如何在word中插入代码
  10. 我与UML相爱相杀的狗血日常