[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 k is always valid, 1 ≤ k ≤ array's length.

考察:快排一次划分 

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        int left = 0, right = nums.size() - 1;
        while (1) {
            int pos = partition(nums, left, right);
            if (pos == k-1)
                return nums[pos];
            else if (pos > k-1)
                right = pos - 1;
            else
                left = pos + 1;
        }
    }
    
    int partition(vector<int>& nums, int left, int right) {
        int pivot = nums[left];
        
        int low = left + 1, high = right;
        while (low <= high) {
            if (nums[low] < pivot && pivot < nums[high])
                swap(nums[low++], nums[high--]);
            
            if (nums[low] >= pivot)
                low ++;
            if (nums[high] <= pivot)
                high --;
        }
        swap(nums[left], nums[high]);
        return high;
    }
};
发布了467 篇原创文章 · 获赞 40 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/caicaiatnbu/article/details/104176865
今日推荐