leetcode_找到第 k 大的元素
排序
1 class Solution { 2 public int findKthLargest(int[] nums, int k) { 3 Arrays.sort(nums); 4 return nums[nums.length-k]; 5 } 6 }
利用小根堆
1 class Solution { 2 public int findKthLargest(int[] nums, int k) { 3 PriorityQueue<Integer> minHeap = new PriorityQueue<>(); 4 for(int num:nums){ 5 minHeap.add(num); 6 if(minHeap.size()>k) minHeap.poll(); 7 } 8 return minHeap.peek(); 9 } 10 }
快速排序
1 public int findKthLargest(int[] nums, int k) { 2 k = nums.length - k; 3 int l = 0, h = nums.length - 1; 4 while (l < h) { 5 int j = partition(nums, l, h); 6 if (j == k) { 7 break; 8 } else if (j < k) { 9 l = j + 1; 10 } else { 11 h = j - 1; 12 } 13 } 14 return nums[k]; 15 } 16 private int partition(int[] a, int l, int h) { 17 int i = l, j = h + 1; 18 while (true) { 19 while (a[++i] < a[l] && i < h) ; 20 while (a[--j] > a[l] && j > l) ; 21 if (i >= j) { 22 break; 23 } 24 swap(a, i, j); 25 } 26 swap(a, l, j); 27 return j; 28 } 29 private void swap(int[] a, int i, int j) { 30 int t = a[i]; 31 a[i] = a[j]; 32 a[j] = t; 33 }

浙公网安备 33010602011771号