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

相关推荐

04-03 15:12
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务