数组中最小的K个数
最小的K个数
http://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
思路分析:用快速排序算法 排好顺序之后,再取出前K个数就是最小的数了
import java.util.*; public class Solution { public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { ArrayList<Integer> list = new ArrayList<>(); if(k > input.length){ return list; } //Arrays.sort(input); quickSort(input, 0, input.length-1); for(int i=0; i<k; i++){ list.add(input[i]); } return list; } private void quickSort(int[] a, int begin, int end){ if(begin > end || a.length == 0 || a == null){ return; } int num = a[begin]; int i = begin, j = end; while(i!=j){ //比较数组最后的值与参考数的大小 如果大于参考数值 则将指针向前移 while(a[j] >= num && i<j){ j--; } while(a[i] <= num && i<j){ i++; } //执行到这里i索引上的值大于参考值 索引j上的值小于参考值 故而将i、j上的值互换 if(i<j){ int t = a[j]; a[j] = a[i]; a[i] = t; } } a[begin] = a[i]; //将参考值和a[i]进行互换 a[i] = num; quickSort(a, begin, i-1); quickSort(a, i+1, end); } }