最小的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;
    }
}

  1. ArrayList的插入也是add,只传入要放入对象的话就加在末尾,同时传入位置和对象的话就插入到指定位置
  2. ArrayList的subList方法是左开右闭的。注意这个方法传回的是List对象,是ArrayList的父类,并不能强制转化为子类
  3. 对于List对象,如果使用对象.sort()方法的话,就必须传入一个Comparator对象,所以方便起见还是使用Collections.sort()吧
  4. ArrayList对象可以使用remove(index)的方式除去某些节点
  5. 这道题居然有case是k>n
posted @ 2020-03-05 21:26  别再闹了  阅读(56)  评论(0)    收藏  举报