topk 问题
对于固定数量的数据,堆排序和快速排序都可以,数据流就用堆排序
//堆排序:
class Solution
{
int findKthLargest(int k , vector<int>& nums)
{
priority_queue<int,vector<int>,greater<int>> p ;
for(auto n : nums)
{
p.push(n) ;
if(p.size() > k) p.pop() ;
}
return (p.empty() ? 0 : p.top()) ;
}
}
//快速排序
int partition(int l , int r , vector<int>& nums)
{
int pi = (rand() % (r - l + 1)) + l ;
int pivot = nums[pi] ;
swap(nums[pivot] , nums[l]) ;
while(l < r)
{
while(r > l && nums[r] > pivot) r-- ;
nums[l] = nums[r] ;
while(l < r && nums[l] <= pivot) l++ ;
nums[r] = nums[l] ;
}
nums[l] = pivot ;
return l + 1 ;
}
int quickSort(vector<int> &nums , k , int l , int r)
{
if(l == r) return nums[l] ;
int par = partition(l , r , nums) ;
if(par == k) return nums[par-1] ;
else if(par < k) return quickSort(nums , k , par , r )
else return quickSort(nums , k , l , par - 2 ) ;
}
浙公网安备 33010602011771号