LeetCode: 215. Kth Largest Element in an Array
LeetCode: 215. Kth Largest Element in an Array
题目描述
Find the k
th largest element in an unsorted array. Note that it is the k
th largest element in the sorted order, not the k
th distinct element.
Example 1:
Input: [3,2,1,5,6,4] and k = 2
Output: 5
Example 2:
Input: [3,2,3,1,2,4,5,5,6] and k = 4
Output: 4
Note:
- You may assume
k
is always valid,1 ≤ k ≤ array's length
.
解题思路
利用快速排序的 partition
函数。
AC 代码
class Solution {
// [beg, end)
void partition(vector<int>& nums, int beg, int end, int k)
{
if(beg+1 >= end) return;
int left = beg+1;
int right = end-1;
while(left < right)
{
while(left < right && nums[left] >= nums[beg]) ++left;
while(left < right && nums[right] < nums[beg]) --right;
if(left < right) swap(nums[left], nums[right]);
}
if(nums[beg] < nums[left]) swap(nums[beg], nums[left]);
else swap(nums[beg], nums[--left]);
if(k-1 == left) return;
else if(k-1 < left) partition(nums, beg, left, k);
else partition(nums, left+1, end, k);
}
public:
int findKthLargest(vector<int>& nums, int k) {
partition(nums, 0, nums.size(), k);
return nums[k-1];
}
};