您的位置:首页 > 其它

215. Kth Largest Element in an Array

2016-05-02 13:36 316 查看
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.

求数组中的第K大的数字。

第一个思路就是利用快拍的思想,熟悉一下快拍的代码吧

用了两种划分算法,任选一个即可。

class Solution {
public:
int partition1(vector<int>& a,int l,int r){
int pivot=a[r];
int i=l-1,j;
for(j=l;j<r;j++){
if(a[j]<pivot){
i++;
swap(a[i],a[j]);
}
}
swap(a[++i],a[r]);
return i;
}
int partition2(vector<int>& a,int l,int r){
int p=a[r];
while(l<r){
while(l<r&&a[l]<=p){
l++;
}
a[r]=a[l];
while(l<r&&a[r]>=p){
r--;
}
a[l]=a[r];
}
a[r]=p;
return l;
}
int find(vector<int>& a,int k,int l,int r){
if(l>=r)return a[l];
int tmp=partition2(a,l,r);
if(tmp==k)return a[k];
else if(tmp<k)
return find(a,k,tmp+1,r);
else
return find(a,k,l,tmp-1);
}
int findKthLargest(vector<int>& nums, int k) {
return find(nums,nums.size()-k,0,nums.size()-1);
}
};


另外一种解法就是利用堆排序的特点,每次输出堆顶的元素。

class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
make_heap(nums.begin(),nums.end());
while(--k){
pop_heap(nums.begin(),nums.end());
nums.pop_back();
}
return nums.front();
}
};


关于STL堆函数的使用参考:/article/1392199.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: