美文网首页Leetcode每日两题程序员
Leetcode 215. Kth Largest Elemen

Leetcode 215. Kth Largest Elemen

作者: ShutLove | 来源:发表于2017-11-26 23:52 被阅读9次

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.

For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

思路:
根据快速排序的partition,每次找到当前选取元素(第一个)在数组中的位置,如果这个位置等于nums.length - 1,就找到了要求的元素;如果小于,那么继续在右边找;如果大于,在左边继续找。

public int findKthLargest(int[] nums, int k) {
    if (k < 1 || nums == null) {
        return 0;
    }

    return getKth(nums.length - k +1, nums, 0, nums.length - 1);
}

public int getKth(int k, int[] nums, int start, int end) {

    int pivot = nums[end];

    int left = start;
    int right = end;

    while (true) {

        while (nums[left] < pivot && left < right) {
            left++;
        }

        while (nums[right] >= pivot && right > left) {
            right--;
        }

        if (left == right) {
            break;
        }

        swap(nums, left, right);
    }

    swap(nums, left, end);

    if (k == left + 1) {
        return pivot;
    } else if (k < left + 1) {
        return getKth(k, nums, start, left - 1);
    } else {
        return getKth(k, nums, left + 1, end);
    }
}

public void swap(int[] nums, int n1, int n2) {
    int tmp = nums[n1];
    nums[n1] = nums[n2];
    nums[n2] = tmp;
}

相关文章

网友评论

    本文标题:Leetcode 215. Kth Largest Elemen

    本文链接:https://www.haomeiwen.com/subject/crolbxtx.html