LeetCode: 215. Kth Largest Element in an Array

版权声明:本文由博主@杨领well发表在http://blog.csdn.net/yanglingwell,如果转载请注明出处。 https://blog.csdn.net/yanglingwell/article/details/82918220

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.

解题思路

利用快速排序的 partition 函数。

AC 代码

class Solution {
    // [beg, end)
    void partition(vector<int>& nums, int beg, int end, int k)
    {
        if(beg+1 >= end) return;
        
        int left = beg+1;
        int right = end-1;
        
        while(left < right)
        {
            while(left < right && nums[left] >= nums[beg]) ++left;
            while(left < right && nums[right] < nums[beg]) --right;
            
            if(left < right) swap(nums[left], nums[right]);
        }
        
        if(nums[beg] < nums[left]) swap(nums[beg], nums[left]);
        else swap(nums[beg], nums[--left]);
        
        if(k-1 == left) return;
        else if(k-1 < left) partition(nums, beg, left, k);
        else partition(nums, left+1, end, k);
    }
public:
    int findKthLargest(vector<int>& nums, int k) {
        partition(nums, 0, nums.size(), k);
        
        return nums[k-1];
    }
};

猜你喜欢

转载自blog.csdn.net/yanglingwell/article/details/82918220