1. 程式人生 > 其它 >215. 陣列中的第K個最大元素(快排,堆排序)

215. 陣列中的第K個最大元素(快排,堆排序)

 

給定整數陣列 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; } };