剑指 Offer 40. 最小的k个数
reverseOrder() 方法用于获取一个比较有否就实现Comparable接口的对象的集合的自然顺序相反。
剑指 Offer 40. 最小的k个数
class Solution { public int[] getLeastNumbers(int[] arr, int k) { if(k == 0 || arr.length ==0) return new int[0]; //小根堆变大根堆 Queue<Integer> heap = new PriorityQueue<>(Collections.reverseOrder()); for(int num : arr){ //没达到k个数就入堆 if(heap.size() < k) heap.offer(num); //如果遍历到的数比堆顶还小,就先poll堆顶,然后将该数放进堆里 //如果比堆顶大就跳过了 else if(num < heap.peek()){ heap.poll(); heap.offer(num); } } int[] res = new int[heap.size()]; //用idx当下标,将堆中元素存入数组 int idx = 0; for(int num : heap) res[idx++] = num; return res; } }