最小的k個數

題目描述

輸入n個整數,找出其中最小的K個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。

思路分析:

  • 先考慮邊界情況:k爲0時,數組長度n小於k時,數組爲空時
  • 把前k各元素加入到結果集中(用result表示)
  • 分析數組中k+1至n各元素:如果該元素比result中最大值大,則替換
  • 返回result
public ArrayList<Integer> getLeastNum(int[] input,int k){
         ArrayList<Integer> result=new ArrayList<Integer>();
        //爲空時
        if(input==null){
            return null;
        }
        int len=input.length;

        //返回長度大於數組總長度時 以及返回個數爲0個時
        if(k>len || k==0){
            return result;
        }

        if(k==len){//返回長度等於數組總長度時
            for(int i=0;i<len;i++)
                  result.add(input[i]);
            return result;
        }else{

            for(int i=0;i<k;i++){//先把前k各元素排序加入
                result.add(input[i]);
            }

            for(int j=k;j<len;j++){//循環k--len個元素
                int temp=input[j];

                //獲取已加入的k個元素中最大的元素位置
                int max=0;
                for(int m=1;m<k;m++){
                    if(result.get(m)>result.get(max))
                        max=m;
                }

                //最大元素與目標元素比較
                if(temp<result.get(max)){
                    result.set(max, temp);
                }

            }

        }
        return result;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章