21.03.08 LeetCode215. 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
class Solution { Random random = new Random(); public int findKthLargest(int[] nums, int k) { return quicksort(nums,0,nums.length-1,nums.length-k); //此处k为nums.length-k,意思是第k大的数在有序情况下的下标位置 } public int quicksort(int[] a,int l ,int r,int index) { int q = randomPatiton(a, l, r); if(q==index) return a[q]; else return q<index? quicksort(a,q+1,r,index): quicksort(a, l, q-1, index); } public int randomPatiton(int[] a,int l,int r) { int i = random.nextInt(r-l+1)+l; swap(a,r,i); return patiton(a,l,r); } public int patiton(int[] a,int l,int r) { int x = a[r],i=l-1; for(int j = l;j<r;j++) { if(a[j]<=x) swap(a,j,++i); } swap(a,r,i+1); return i+1; } public void swap(int[] a,int i,int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } }