kth largest element in an array
2016-07-22 10:34
513 查看
找第k大,exch+partition+select:
private void exch(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
private int partition(int[] a, int lo, int hi) {
int i = lo, j = hi + 1;
int v = a[lo];
while (true) {
while (a[++i] > v && i != hi) ;
while (a[--j] < v && j != lo) ;
if (i >= j) break;
exch(a, i, j);
}
exch(a, lo, j);
return j;
}
public int findKthLargest(int[] nums, int k) {
int lo = 0, hi = nums.length - 1;
while (lo < hi) {
int j = partition(nums, lo, hi);
if (j + 1 == k) {
return nums[k - 1];
} else if (j + 1 > k) {
hi--;
} else {
lo++;
}
}
return nums[k - 1];
}
private void exch(int[] a, int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
private int partition(int[] a, int lo, int hi) {
int i = lo, j = hi + 1;
int v = a[lo];
while (true) {
while (a[++i] > v && i != hi) ;
while (a[--j] < v && j != lo) ;
if (i >= j) break;
exch(a, i, j);
}
exch(a, lo, j);
return j;
}
public int findKthLargest(int[] nums, int k) {
int lo = 0, hi = nums.length - 1;
while (lo < hi) {
int j = partition(nums, lo, hi);
if (j + 1 == k) {
return nums[k - 1];
} else if (j + 1 > k) {
hi--;
} else {
lo++;
}
}
return nums[k - 1];
}
相关文章推荐
- jquery中css()与animate()
- DB2数据库的学习及总结
- Android中View转换为Bitmap及getDrawingCache=null的解决方法
- XML配置文件
- 关于JAVA中的listener回调机制,以及其在Android中的使用
- JavaScript 正则表达式
- Jquery.load() 使用
- POJ2342 树形dp
- C/S系统实现两数求和(非阻塞+epoll+心跳包检测用户在线状况+滚动日志+配置文件.)
- 报错: Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/baidu/
- iOS水波纹动画详解
- POJ2377-Bad Cowtractors
- [置顶] Asp.net Core + EF Core + Bootstrap搭建的MVC后台通用管理系统模板(跨平台版本)
- css 框模型要点
- TextView设置超链接、背景颜色、字体颜色等等,Spannable的使用。
- Webservice的简单应用(wsdl的获取)
- 基于二叉树上递归(动规?)的逆波兰表达式(poj)
- tjut 5416
- Redis3.2.1分布式集群搭建(非单机版本)
- Linux 判断的常用判断说明