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.
解题思路:我采用的排序方法,然后从排序后的数组中取出对应的值就好。
public class Solution {
public int findKthLargest(int[] nums, int k) {
Arrays.sort(nums);
return nums[nums.length-k];
}
}
这样的语句太简单了,就在网上找了一下分治法的解法,发现了一篇不错的博客
点击打开链接,看了之后也自己动手敲了一下。
public class Solution {
public int findKthLargest(int[] nums, int k) {
int left=0;
int right=nums.length-1;
while(true){
int pos = helper(nums,left,right);
if(pos==k-1){
return nums[pos];
}else if(pos< k-1){
left=pos+1;
}else{
right=pos-1;
}
}
}
public int helper(int[] nums,int begin ,int end ){
int left = begin +1;
int right = end;
while(left <=right){
if(nums[left]<nums[begin] && nums[right]>nums[begin]){
swap(nums,left,right);
}
if(nums[left]>=nums[begin]){
left++;
}
if(nums[right]<=nums[begin]){
right--;
}
}
swap(nums,begin,right);
return right;
}
public void swap(int[] nums, int i,int j){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}