题解 | #寻找第K大#

寻找第K大

https://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

class Solution {
  private:
    // bool flag = false;
  public:
    void quickSort(vector<int>& nums, int left, int right, int& k) {
        auto i = left;
        auto j = right + 1;
        if (i >= j) {
            return;
        }
        auto pivot = nums[i];
        while (i < j) {
            do {
                i++;
            } while (i <= right && nums[i] <= pivot && i <= j);
            do {
                j--;
            } while (j <= right && nums[j] >= pivot && j >= i);
            if (i < j) {
                auto tmp =  nums[j];
                nums[j] = nums[i];
                nums[i] = tmp;
            }
        }
        nums[left] = nums[j];
        nums[j] = pivot;
        if (nums.size() - j == k) {
            std::cout << k;
                k = nums[j];
            return;
        }

        quickSort(nums, left, j - 1, k);
        quickSort(nums, j + 1, right, k);
    }
    int findKth(vector<int>& a, int n, int K) {
        // write code here
        quickSort(a, 0, a.size()-1, K);
        return K;
    }
};

在线编程练习 文章被收录于专栏

C++在线编程练习题解

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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