算法学习记录(9)--最大的k个数
package p1; import java.util.ArrayList; import java.util.Collections; import java.util.PriorityQueue; /** * 最小的k个数 * @author Guozhu Zhu * @date 2018/4/19 * @version 1.0 * */ public class Test09 { public static void main(String[] args) { int[] arr = {1, 6, 7, 8, 5, 2, 0}; ArrayList<Integer> list = fun1(arr, 5); for (Integer i : list) { System.out.println(i); } } /* * 使用PriorityQueue当作Heap, 每次返回最小的值, O(T) = O(nlogk); */ public static ArrayList<Integer> fun1(int arr[], int k) { ArrayList<Integer> res = new ArrayList<Integer>(); PriorityQueue<Integer> queue = new PriorityQueue<Integer>(k); for (int i = 0; i < arr.length; i++) { if (i < k) { queue.add(arr[i]); } else { if (arr[i] > queue.peek()) { queue.remove(); queue.add(arr[i]); } } } while (!queue.isEmpty()) { res.add(queue.remove()); } return res; } }