题目:在数组中找到第k大的元素
样例
给出数组 [9,3,2,4,8]
,第三大的元素是 4
给出数组 [1,2,3,4,5]
,第一大的元素是 5
,第二大的元素是 4
,第三大的元素是 3
,以此类推
分析:一开始的想法是用选择排序,将数组变为有序数组,再寻找第k大的元素。然而,后来发现运行时间有限制。于是,换了快速排序来解决这个问题。
class Solution {
/*
* @param k : description of k
* @param nums : array of nums
* @return: description of return
*/
public int kthLargestElement(int k, int[] nums) {
// write your code here
int left=0;
int right=nums.length-1;
if(k>nums.length){
return 0;
}
int m=core(nums,left,right);
while(m!=nums.length-k){
if(m>nums.length-k){
m=core(nums,left,m-1);
}else{
m=core(nums,m+1,right);
}
}
return nums[m];
}
public int core(int[]nums,int left,int right){
int tmp=nums[left];
while(left<right){
while(left<right&&nums[right]>tmp){
right--;
}
if(left<right){
nums[left]=nums[right];
left++;
}
// nums[left]=nums[right];
while(left<right&&nums[left]<tmp){
left++;
}
if(left<right){
nums[right]=nums[left];
right--;
// nums[right]=nums[left];
}
}
nums[left]=tmp;
return left;
}
}