Java for LeetCode 215 Kth Largest Element in an Array

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.

解题思路:

本题是《算法导论》原题,9.2节用归并的思路给出了时间复杂度为O(n)的算法,9.3节给出了最坏时间为O(n)的算法(就是讨论区的第一个),实现起来比较麻烦(笔者提交Wrong Answer了几次,不想搞了),本题最简单的快排即可实现,JAVA实现如下:

    public int findKthLargest(int[] nums, int k) {
        Arrays.sort(nums);
        return nums[nums.length-k];
    }

 另外,网上看人用归并排序,传送如下:

    public int findKthLargest(int[] nums, int k) {
        return findK(nums, nums.length-k, 0, nums.length-1);
    }
    
    private int findK(int[] nums, int k, int i, int j) {
        if(i>=j) return nums[i];
        int m = partition(nums, i, j);
        if(m==k) return nums[m];
        else if(m<k) {
            return findK(nums, k, m+1, j);
        } else {
            return findK(nums, k, i, m-1);
        }
    }
    
    private int partition(int[] nums, int i, int j) {
        int x = nums[i];
        int m = i;
        int n = i+1;
        
        while(n<=j){
            if(nums[n]<x) {
                swap(nums, ++m, n);
            }
            ++n;
        }
        swap(nums,i, m);
        return m;
    }
    
    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
原文地址:https://www.cnblogs.com/tonyluis/p/4564601.html