/** * 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 * 维护一个双端队列按从小到大的顺序存放最小的K个数字 * 遍历原始数组, * 小于队列中的最小值,后端入队,大于于队列中的最大值,前端出队。队列长度大于k 剔除最大值 * 小于最大值且大于最小值,最大值出队,再维护队列顺序。 * 需要注意:k的判断;值相等的时候处理方式;k大于数组长度时直接给空(题意不明);k等于1时需要做特殊处理 * */ public class CN119 { public static void main(String[] args) { int[] input = {4,5,1,6,2,7,2,8}; System.out.println(GetLeastNumbers_Solution(input,2)); } public static ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> result = new ArrayList<>(); if(k<=0||input==null||input.length==0||k>input.length){ return result; } if(k==1){ int min = input[0]; for (int i = 1; i <input.length ; i++) { if(input[i]<min){ mi