题目
题号:29
题目名:最小的k个数
编程语言
Java
题目描述
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。
初次思路
直接暴力法解决
除去异常状况,首先把需要的k的数加入到集合中
对集合排序后,然后看新的数是否小于集合最后一个数,如果比最后一个数小,说明可以放入集合
从集合第一个开始找插入位置,找到后把最后一个删除
解题代码
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer> res = new ArrayList<> ();
if(input==null||input.length==0||k==0) return res;
int length = input.length;//定义长度
if(k>length) return res;
//将k个数的集合先填满
for (int j = 0; j < k; j++) {
res.add(input[j]);
}
res.sort((o1, o2) -> o1 - o2);//排序
for (int m = k; m < length; m++) {
//看看能否插入集合
if(input[m]<res.get(k-1)) {
//找到集合插入位置
for (int i = 0; i < res.size(); i++) {
if(input[m]<=res.get(i)) {
res.add(i,input[m]);
break;
}
}
res.remove(res.size()-1);//移出集合中多余的那个最大数
}
}
return res;
}
}
算法练习代码我都开源在码云上,有需要的朋友可以看看