LeetCode215 数组中的第k最大元素

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

 

直接用快速排序的partition函数,可以在O(n)时间内解决。或者使用最大堆,时间复杂度为O(nlogn)。

 1 class Solution {
 2 public:
 3     int findKthLargest(vector<int>& nums, int k) {
 4         int n=nums.size();
 5         return partition(nums,0,n-1,n-k);
 6     }
 7 
 8     int partition(vector<int>& nums,int left, int right, int k){
 9         if(left==right)
10             return nums[left];
11         int standard=nums[left];
12         int orileft=left,oriright=right;
13         while(left<right){
14             while(left<right && nums[right]>=standard)
15                 --right;
16             if(left<right)
17                 nums[left]=nums[right];
18             
19             while(left<right && nums[left]<standard)
20                 ++left;
21             if(left<right)
22                 nums[right]=nums[left];
23         }
24         nums[left]=standard;
25         cout<<nums[left]<<endl<<left<<endl;
26         if(left==k)
27             return standard;
28         else if(left>k)
29             return partition(nums,orileft,left-1,k);
30         else 
31             return partition(nums,left+1,oriright,k);
32     }
33 };

 

posted @ 2020-07-29 21:48  __rookie  阅读(123)  评论(0编辑  收藏  举报