LeetCode: 215. Kth Largest Element in an Array

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];
    }
};
全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务