Kth Largest Element in an Array

来源:互联网 发布:淘宝开旗舰店费用 编辑:程序博客网 时间:2024/06/05 23:39

Find the kth largest element in an unsorted array. Note that it is the kth largest 

element in the sorted order, not the kth distinct element.

For example,

Given [3,2,1,5,6,4] and k = 2, return 5.

Note:

You may assume k is always valid, 1 ≤ k ≤ array's length.
最简单的方法就是排序,倒数len-k就是结果。时间是O(nlog(n))。
public int findKthLargest(int[] nums, int k) {    Arrays.sort(nums);    return nums[nums.length-k];}

还有类似与快速排序的方法。平均时间是O(n), 最坏的情况是O(n^2).
public int findKthLargest(int[] nums, int k) {if(nums==null||k<1)return 0;return getKth(nums.length-k,nums,0,nums.length-1);}private int getKth(int k,int[] nums,int start,int end){int result=nums[end];int left=start,right=end;while(left<right){while(nums[left]<result&&left<right)left++;while(nums[right]>=result&&left<right)right--;swap(nums,left,right);}swap(nums,left,end);if(k==left)return result;else if(k<left)return getKth(k,nums,start,left-1);elsereturn getKth(k,nums,left+1,end);}private void swap(int[] nums,int a,int b){int tmp=nums[a];nums[a]=nums[b];nums[b]=tmp;}


0 0
原创粉丝点击