[leetcode-215-Kth Largest Element in an Array]
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.
Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.
思路:
利用快排划分的思想来找。注意从小到大排序以后,第k大的是num[n-k]。
int partion (vector<int>& nums,int begin,int end) { int pivot = nums[begin]; while(begin<end) { while(nums[end]>=pivot && begin<end)end--; nums[begin] = nums[end]; while(nums[begin]<=pivot && begin<end)begin++; nums[end] = nums[begin]; } nums[begin] = pivot; return begin; } int findKthLargest(vector<int>& nums, int k) { int begin =0,end = nums.size()-1,n =nums.size(); while(begin<end) { int j = partion(nums,begin,end); if(j==n-k)break; else if(j<n-k)begin = j+1; else end = j-1; } return nums[n-k]; }