29、最小的K个数
一、题目
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
二、解法
1 import java.util.ArrayList; 2 public class Solution { 3 public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) { 4 // 运行时间:35ms 占用内存:503k 5 ArrayList<Integer> minNs = new ArrayList<Integer>(); 6 if (k == 0 || k > input.length) 7 return minNs; 8 int[] m = new int[k]; 9 // 先把前k个存储到结果 10 for (int j = 0; j < k; j++) { 11 m[j] = input[j]; 12 } 13 int maxIndex = 0;// 最大下标 14 boolean findMax = true;// 默认每次都要找到最大的 15 for (int i = k; i < input.length; i++) { 16 if(findMax) 17 maxIndex = 0; 18 // 开始比较,从第k个开始,每次找最大的替换出来 19 20 for (int d = 1; d < k; d++) { 21 if (m[d] > m[maxIndex]) { 22 maxIndex = d; 23 } 24 25 } 26 // 找到后 比较 如果当前值input[k]比 m中的最大值还小,那么替换 27 if (input[i] < m[maxIndex]) { 28 m[maxIndex] = input[i]; 29 findMax = true; 30 }else { 31 findMax = false; 32 } 33 } 34 for (int i = 0; i < k; i++) { 35 // 添加到minNs中 36 minNs.add(m[i]); 37 } 38 return minNs; 39 } 40 }