LeetCode: 215. Kth Largest Element in an Array
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.
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
kis 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];
}
};
