面试算法——寻找第K大的数(快速排序的应用)
来源:互联网 发布:淘宝的kindle 官方重封 编辑:程序博客网 时间:2024/04/28 04:14
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
测试样例:
[1,3,5,2,2],5,3
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
测试样例:
[1,3,5,2,2],5,3
返回:2
public class 寻找第K大的数 {public static void main(String[] args) {// TODO Auto-generated method stubint[] a = { 1, 3, 5, 2, 2 };System.out.println(findKth(a, a.length, 2));/* * qsort(a, 0, a.length-1); for(int i:a){ System.out.print(i+" "); } */}public static int findKth(int[] a, int n, int K) {// write code herereturn qs(a, 0, a.length - 1, a.length - K);}static void qsort(int[] a, int left, int right) {if (left < right) {int p = partition(a, left, right);qsort(a, left, p - 1);qsort(a, p + 1, right);}}static int qs(int[] a, int left, int right, int k) {// if (left < right){int p = partition(a, left, right);if (p == k) {return a[p];} else if (p > k)return qs(a, left, p - 1, k);elsereturn qs(a, p + 1, right, k);}}static int partition(int[] a, int left, int right) {int p = a[left];while (left < right) {while (left < right && a[right] >= p) {right--;}if (left < right) {a[left++] = a[right];}while (left < right && a[left] <= p) {left++;}if (left < right) {a[right--] = a[left];}}a[left] = p;return left;}}
0 0
- 面试算法——寻找第K大的数(快速排序的应用)
- 快速选择——寻找第k小的数
- 算法-寻找第K大的数的方法总结
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第K大的数
- 寻找第k大的数
- 寻找第k大的数
- 第k大的数(快速排序的划分过程)
- 由快速排序引出的第k大的数..
- 快速排序找第k大的数
- 求n个数中第k大的数、前K大的数、快速排序
- 用快速排序的思想求第K大的数或最大的k个数
- ios: XcodeColors插件输出颜色不变
- Future的使用
- 最速下降法/steepest descent,牛顿法/newton,共轭方向法/conjugate direction,共轭梯度法/conjugate gradient 及其他
- error LNK2005: _DllMain@12 已经在 MSVCRTD.lib(dllmain.obj) 中定义
- MyBatis的like模糊查询
- 面试算法——寻找第K大的数(快速排序的应用)
- Ubuntu下安装搜狗输入法
- C++继承与派生小例
- hibernate主键生成机制
- TortoiseGit保存用户名密码
- startActivityForResult、onActivityResult和onResume
- 对Timer类的应用
- maven pom文件详解
- Android如何调用第三方SO库