算法——寻找第K个最大的数
2024-10-18 18:28:19
在未排序的数组中找到第 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;
}
}
最新文章
- JavaScript随笔1
- atititt.java定时任务框架选型Spring Quartz 注解总结
- 台大《机器学习基石》课程感受和总结---Part 1(转)
- ubuntu apt-get update 失败解决
- LINUX下 Udev详解
- javascript倒置再次被否定作用
- 【爬虫入门手记03】爬虫解析利器beautifulSoup模块的基本应用
- 计数排序(O(n+k)的排序算法,空间换时间)
- swift 密码由6-16数字和字母组合组成
- 把流的形式转化为Base64
- sitecore开发入门之如何在代码中获取SITECORE图像URL
- C# 中使用log4.net的注意事项
- MUI 打包android app
- Glusterfs挂载报错解决办法
- P1297 [国家集训队]单选错位(期望)
- Html Agility Pack解析Html(C#爬虫利器)
- sql loader 控制文件使用十六进制分隔符
- Git提交空文件夹的技巧
- 在浏览器中使用JS打开并展示PDF文件
- socket 和 webscoket 的区别
热门文章
- C++调用Go方法的字符串传递问题及解决方案
- Linux (操作二)
- 02、Hibernate开发步骤
- 详解在Word文档中常见的各种公式编辑问题
- 早安打工人! 来把你的.NET程序模块化吧
- Linux(CentOS 7下httpd的安装)
- Forethought Future Cup - Final Round (Onsite Finalists Only) C. Thanos Nim 题解(博弈+思维)
- D. Numbers on Tree(构造)【CF 1287】
- 如何在word中插入代码
- 我与UML相爱相杀的狗血日常