找出数组中的第K大的元素
来源:互联网 发布:sql限制返回条数 编辑:程序博客网 时间:2024/05/20 06:50
问题描述
找出数组中的第K大的元素,时间复杂度为O(n)
代码
public class FindK { //随机取一个基准数pivot,然后遍历数组一次,比基准数大的逐一的放在最前面,最后返回基准数的位置 //并且次基准数在a[left...right]中是第(k-left+1)大的元素 public static int randomPartition(int[] a,int left,int right){ int pivot=a[right],k=left-1; for(int i=left;i<=right;i++){ if(a[i]>pivot){ int temp=a[i]; a[i]=a[++k]; a[k]=temp; } } int t=a[right]; a[right]=a[++k]; a[k]=t; return k; } //得到第K大的元素 public static int getMaxK(int[] a,int k,int left,int right){ int maxK=randomPartition(a,left,right); //num表示是第a[maxK]是第num大 int num=maxK-left+1; if(num==k) return a[maxK]; else if(num<k) return getMaxK(a,k-num,maxK+1,right); else return getMaxK(a,k,left,maxK-1); } //验证 public static void main(String[] args) { int[] a={12012, 3, 945, 965, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5}; //依次求出第i大的元素最后打印的结果是降序排列 for(int i=0;i<a.length;i++){ System.out.println(getMaxK(a,i+1,0,14)); } }}
0 0
- 找出数组中的第K大的元素
- 数组中找出第二个最大的元素(第k大的元素)
- 找出第K大的数<数组>
- 找出大数组array中第k大的元素(要求时间复杂度O(1))
- 算法(三)找出数组中第K大元素
- 数组中的第K大元素
- [LeetCode] Kth Largest Element in an Array (找出数组的第k大的元素)
- 利用快排思想找出数组中第k大的元素
- 数组中第K大的元素
- 快速找出第K大的元素 (快速排序)
- 【每天学点算法题10.18】找出数组中的第K大的数
- java 实现从无序数组中 找出第k大的数, 无序数组充许有重复元素
- 找出数组中第k个元素
- 无序数组找出其中的第K大的数
- 数组中找出第k大的值
- 找出数组中第K大的数值
- 数组中找出第k大的值
- 数组试题---找出第k大的数
- c语言输入输出优化
- DoTween - Sequence
- POJ 2586 贪心
- 北大OJ1308
- ndk for mac 下载地址
- 找出数组中的第K大的元素
- Android实现简单的文件下载
- 北大OJ3414
- iOS 9 请求网络数据出现:App Transport Security has blocked a cleartext HTTP (http://) resource load since it
- 从头认识java-12.5 代理以及动态代理
- xcode 使用代码块Code Snippets
- Struts2的国际化
- 静态区间第K大
- 方法选择器的妙用