数组中的第k大元素

leetcode上面题目

需要运用到快速排序,position方法返回数组此时的数组下标index,如果index的值和nums.length-k == index的话,直接放回nums[index],

如果k < index的话,需要对left、index - 1进行继续划分,否则对index + 1, right找到index值

class Solution {
    public int findKthLargest(int[] nums, int k) {
        return sort(nums, 0, nums.length - 1, nums.length - k);
        
    }
    private int sort(int[] nums, int left, int right, int k) {
        int index = position(nums, left, right);
        if (index == k) {
            return nums[k];
        }
        return k < index ? sort(nums, left, index - 1, k) : sort(nums, index + 1, right, k);
    }
    private int position(int [] nums, int left, int right) {
        if (left < right) {
            int x = nums[left], i = left, j = right;
            while (i < j) {
                while (i < j && nums[j] > x) {
                    j--;
                }
                if (i < j) {
                    nums[i++] = nums[j];
                }
                while (i < j && nums[i] < x) {
                    i++;
                }
                if (i < j) {
                    nums[j--] = nums[i];
                }
            }
            nums[i] = x;
            return i;
        }
        return left;
    }
    
}

 

posted @ 2022-03-12 16:18  牵魂  阅读(24)  评论(0)    收藏  举报