215. 陣列中的第K個最大元素(快排,堆排序)
阿新 • • 發佈:2022-03-23
給定整數陣列 nums
和整數 k
,請返回陣列中第 k
個最大的元素。
請注意,你需要找的是陣列排序後的第 k
個最大的元素,而不是第 k
個不同的元素。
示例 1:
輸入: [3,2,1,5,6,4] 和
k = 2
輸出: 5
示例 2:
輸入: [3,2,3,1,2,4,5,5,6] 和
k = 4
輸出: 4
class Solution { public: int findKthLargest(vector<int>& nums, int k) { int left = 0, right = nums.size() - 1; while (true) { int idx = partition(nums, left, right); if (idx == k - 1) { return nums[idx]; } if (idx < k - 1) { left = idx + 1; } else { right = idx - 1; } }return 0; } int partition(vector<int>& nums, int left, int right) { int pivot = nums[left], i = left + 1, j = right; while (i <= j) { if (nums[i] < pivot && pivot < nums[j] ) { swap(nums[i++], nums[j--]); }if (nums[i] >= pivot) { i++; } if (pivot >= nums[j]) { j--; } } swap(nums[left], nums[j]); return j; } };