LeetCode 215. Kth Largest Element in an Array(数组求第k大)

题意:数组求第k大。

分析:快排

class Solution {
public:
    int Partition(vector<int>& nums, int l, int r){
        int p = nums[l];
        while(l < r){
            while(l < r && nums[r] >= p) --r;
            nums[l] = nums[r];
            while(l < r && nums[l] <= p) ++l;
            nums[r] = nums[l];
        }
        nums[l] = p;
        return l;
    }
    int QuickSort(vector<int>& nums, int k, int l, int r){
        int p = Partition(nums, l, r);
        if(r - p + 1 == k) return nums[p];
        else if(r - p + 1 > k) return QuickSort(nums, k, p + 1, r);
        else return QuickSort(nums, k - (r - p + 1), l, p - 1);
    }
    int findKthLargest(vector<int>& nums, int k) {
        int len = nums.size();
        return QuickSort(nums, k, 0, len - 1);
    }
};

  

猜你喜欢

转载自www.cnblogs.com/tyty-Somnuspoppy/p/12595365.html