数组中的第 k 大的数字

324 阅读1分钟

leetcode地址:leetcode.cn/problems/xx…

只寻找数组中第k大的数字,可以考虑使用快速排序的思想,每一次快排周期结束时,flg位如果插入到第N位,那其一定是第N大的数字,循环这个过程,直至找到需要放置在第K位的flg值,就是我们所求的答案。

class Solution {
    public int findKthLargest(int[] nums, int k) {
        quickSort(nums, k - 1, 0, nums.length - 1);
        return nums[k - 1];
    }

    public void quickSort(int[] nums, int k, int beg, int end) {
        if (beg == end) return;
        int tem = nums[beg];
        int lef = beg + 1;
        int rig = end;
        while (lef < rig) {
            while (lef < rig && nums[lef] >= tem) lef++;
            while (lef < rig && nums[rig] < tem) rig--;
            if (lef < rig) swap(nums, lef, rig);
        }
        if (nums[lef] < tem) lef--;
        swap(nums, lef, beg);
        if (lef == k) return;
        if (lef < k) quickSort(nums, k, lef + 1, end);
        else quickSort(nums, k, beg, lef - 1);
    }

    public void swap(int[] nums, int i, int j) {
        int tem = nums[i];
        nums[i] = nums[j];
        nums[j] = tem;
    }
}