Top k Largest Numbers

public class Solution {
    /**
     * @param nums: an integer array
     * @param k: An integer
     * @return: the top k largest numbers in array
     */
    public int[] topk(int[] nums, int k) {
        // write your code here
        quickSort(nums, 0, nums.length - 1, k);
        
        int[] topk = new int[k];
        for(int i = 0; i < k; i++) {
            topk[i] = nums[i];
        }
        return topk;
    }
    
    private void quickSort(int[] A, int start, int end, int k) {
        if(start >= end) {
            return ;
        }
        
        if(start >= k) {
            return;
        }
        
        int left = start, right = end;
        // pivot 
        Random rand = new Random(end - start + 1);
        int index = rand.nextInt(end - start + 1) + start;
        int pivot = A[index];
        
        while(left <= right) {
            while(left <= right && A[left] > pivot) {
                left++;
            }
            
            while(left <= right && A[right] < pivot) {
                right--;
            }
            
            if(left <= right) {
                int temp = A[left];
                A[left] = A[right];
                A[right] = temp;
                
                left++;
                right--;
            }
        }
        
        quickSort(A, start, right, k);
        quickSort(A, left, end, k);
    }
}

最后更新于

这有帮助吗?