215. Kth Largest Element in an Array

xiaoxiao2021-02-28  109

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大的数。使用快排算法中的partition函数辅助,加速寻找。基于partition的算法时间复杂度为O(n)。

代码:

class Solution { public: int findKthLargest(vector<int>& nums, int k) { --k; int l = 0, r = nums.size() - 1; while(true) { int idx = partition(nums, l, r); if(idx == k) { return nums[idx]; } else if(idx < k) { l = idx+1; } else { r = idx-1; } } } private: int partition(vector<int>& nums, int l, int r) { int pivot = nums[l], left = l; ++l; while(l <= r) { if(nums[l] < pivot && nums[r] > pivot) { swap(nums[l++], nums[r--]); } if(nums[l] >= pivot) ++l; if(nums[r] <= pivot) --r; } swap(nums[left], nums[r]); return r; } };               

转载请注明原文地址: https://www.6miu.com/read-48429.html

最新回复(0)