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 }

 

posted @ 2017-08-30 15:14  fankongkong  阅读(120)  评论(0编辑  收藏  举报