【leetcode】【剑指offer Ⅱ】076. 数组中的第 k 大的数字

问题描述:

  • 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
    • 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

核心思路:

  • 快速选择算法。

代码实现:

class Solution
{
private:
    // 快速选择
    int quick_select(vector<int>& nums, int lo, int hi, int target)
    {
        int x = nums[hi];
        int i = lo - 1;// 浮标
        for(int j = lo; j < hi; ++j)// i是x位置大小的边界
        {
            if(nums[j] <= x)
                swap(nums[++i], nums[j]);
        }
        swap(nums[++i], nums[hi]);

        return i == target ? nums[i] :
               i > target ? quick_select(nums, lo, i - 1, target) : 
               quick_select(nums, i + 1, hi, target);
    }
public:
    int findKthLargest(vector<int>& nums, int k)
    {
        return quick_select(nums, 0, nums.size() - 1, nums.size() - k);
    }
};

你可能感兴趣的:(#,剑指,offer,Ⅱ,leetcode)