输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
解析:插入排序吧,此题方法很多,初步先用一种方法
代码:
import java.util.*; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> res = new ArrayList<>(); if(k <= 0 || k > input.length){ return res; } //对前k个数使用插入排序 for(int i = 1; i < k; i++){ int j = i - 1; int unFindElement = input[i]; while(j >= 0 && input[j] > unFindElement){ input[j+1] = input[j]; j--; } input[j+1] = unFindElement; } //对后边的数与前k个比较,利用插入排序 for(int i = k ; i < input.length; i++){ if(input[i] < input[k-1]){ int newK = input[i]; int j = k-1; while(j >= 0 && input[j] > newK){ input[j+1] = input[j]; j--; } input[j+1] = newK; } } for(int i = 0; i < k; i++){ res.add(input[i]); } return res; } }