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);
else
return 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;
}