在数组中找到第k大的元素
Yes
例子
给出数组[9,3,2,4,8]。第三大的元素是4
给出数组 [1,2,3,4,5]。第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推
注意
你能够交换数组中的元素的位置
挑战
标签
Expand
要求时间复杂度为O(n),空间复杂度为O(1)
相关题目 Expand
分析:利用快排的思想。不断partition,
代码:
class Solution {
public:
/*
* param k : description of k
* param nums : description of array and index 0 ~ n-1
* return: description of return
*/
int kthLargestElement(int k, vector<int> nums) {
// write your code here
return findKthLargestElement(k,nums,0,nums.size()-1);
}
int findKthLargestElement(int k,vector<int>& nums,int start,int end)
{
if(start==end)
return nums[start];
int index = partition(nums,start,end);
if(end-index+1==k)
return nums[index];
else if(end-index+1>k)
return findKthLargestElement(k,nums,index+1,end);
else
return findKthLargestElement(k-(end-index+1),nums,start,index-1);
}
int partition(vector<int>&nums,int start,int end)
{
int x = (start+end)/2;
swap(nums[start],nums[x]);
int i = start+1;
int j = i;
while(i<=end&&j<=end)
{
if(nums[j]<nums[start])
{
swap(nums[i],nums[j]);
i++;
}
j++;
}
swap(nums[start],nums[i-1]);
return i-1;
}
};