数组中的第k个最大元素-快速排序

23 阅读1分钟
// 数组中的第k个最大元素-快排序  
// 输入: [3,2,1,5,6,4], k = 2  
// 输出: 5  
private static int quickSelect(List<Integer> nums,int k){  
    Random random = new Random();  
    Integer pivot = nums.get(random.nextInt(nums.size()));  
    ArrayList<Integer> big = new ArrayList<>();  
    ArrayList<Integer> equal = new ArrayList<>();  
    ArrayList<Integer> small = new ArrayList<>();  
    for (int num:  
    nums) {  
    if(num>pivot)  
        big.add(num);  
    else if(num<pivot)  
        small.add(num);  
    else  
        equal.add(num);  
    }  
    if(k<=big.size()){  
        return quickSelect(big,k);  
    }  
    if(big.size()+equal.size()<k){  
        return quickSelect(small,k-(big.size()+equal.size()));  
    }  
    return pivot;  
}  
public static int findKthLargest(int[] nums,int k){  
    ArrayList<Integer> list = new ArrayList<>();  
    for (int num:  
    nums) {  
        list.add(num);  
    }  
    return quickSelect(list,k);  
}