最小的K个数
最小的K个数
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
维持一个K长度的最小值集合,然后利用插入排序的思想进行对前K个元素的不断更新。但是非常让人气愤的是居然if(k<= 0 || k > input.length)return result的判断占据了用例的发部分。
import java.util.*;
public class Solution {
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
ArrayList<Integer>ans=new ArrayList<Integer>();
Integer length=input.length;
if(length==0||k<1||k>length){
return ans;
}
Integer max=input[0];
for(int i=0;i<length;i++){
if(i<k){
ans.add(input[i]);
if(i==k-1){
Collections.sort(ans);
max=ans.get(k-1);
}
}else{
if(input[i]<max){
for(int j=0;j<k;j++){
if(ans.get(j)>input[i]){
ans.add(j,input[i]);
break;
}
}
}
}
}
for(int i=ans.size();i>k;i--){
ans.remove(i-1);
}
return ans;
}
}
- ArrayList的插入也是add,只传入要放入对象的话就加在末尾,同时传入位置和对象的话就插入到指定位置
- ArrayList的subList方法是左开右闭的。注意这个方法传回的是List对象,是ArrayList的父类,并不能强制转化为子类
- 对于List对象,如果使用对象.sort()方法的话,就必须传入一个Comparator对象,所以方便起见还是使用Collections.sort()吧
- ArrayList对象可以使用remove(index)的方式除去某些节点
- 这道题居然有case是k>n

浙公网安备 33010602011771号