劍指offer:輸入n個整數,找出其中最小的K個數。

gaozhuang63發表於2020-10-24

劍指offer演算法題


陣列 高階演算法

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

題目分析
方法一 直接排序
直接使用氣泡排序,這裡提高效率的方法是我們按照從小到大,只排前K個數。這樣可以提高效率。

下面是Java程式碼

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList<Integer> list = new ArrayList<>();
        if(input.length < k){
            return list;
        }
        
        list = Maopao(input,k);
        return list;
    }
    
    private ArrayList<Integer> Maopao(int [] input,int k){
        ArrayList<Integer> list = new ArrayList<>();
        for(int i = 0 ; i<k;i++){
            for(int j = input.length-1 ;j >= i+1 ;j--){
                if(input[j]<input[j-1]){
                    int tmp = input[j-1];
                    input[j-1] = input[j];
                    input[j] = tmp;
                }
            }
            list.add(input[i]);
        }
        return list;
    }
}

方法二 TODO

參考https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=13&&tqId=11182&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

相關文章