Sorting - LC 215 Kth Largest Element in an Array

这道题目看了很多方法,都是比较各种排序然后得到想要的。下面有一直线性简单的方法,对于处理小型问题比较有效,因为是时间复杂度线性的O(n),但是空间复杂度比较可怕,特别是如果min和max差别很大的时候,且中间空了很多位。

    public int findKthLargest(int[] nums, int k) {
        if(nums.length == 0 || k < 1) return -1;
        
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        
        for(int n: nums) {
            max = Integer.max(max, n);
            min = Integer.min(min, n);
        }
        
        int[] freq = new int[max-min+1];
        for(int n : nums) ++freq[max-n]; // 0 is max 
        
        for(int i = 0; i < freq.length; ++i){
            k -= freq[i];
            if(k <= 0) return max - i;
        } 
        return -1;  
    }

你可能感兴趣的:(Sorting - LC 215 Kth Largest Element in an Array)