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-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务