美文网首页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