给定一个数组,找出其中最小的K个数。例如数组元素是4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。如果K>数组的长度,那么返回一个空的数组
示例1
输入
复制
[4,5,1,6,2,7,3,8],4
返回值
复制
[1,2,3,4]
用list做数据结构,利用其add(index,value)的自移动特性减少循环手工移动数据操作,使用插入排序排序排序整个数组后取前k个数放入新的list中实现获取最大的k个值。
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
int length = input.length;
if(k > length || k < 1 || length < 1) return new ArrayList();
ArrayList<Integer> res = new ArrayList<>();
int cur = 0;
res.add(input[0]);
for(int i = 1; i < length; i++){
while(res.size() > cur && input[i] > res.get(cur)) cur++;
//这里不做检查就能通过全部测试用例,毕竟测试用例不够健壮(牛客网)
if(cur < res.size()){
res.add(cur,input[i]);
}else{
res.add(input[i]);
}
cur = 0;
}
ArrayList<Integer> result = new ArrayList<>();
for(int i = 0; i < k;i++){
result.add(res.get(i));
}
return result;
}
}