剑指offer:输入n个整数,找出其中最小的K个数。

剑指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

©️2020 CSDN 皮肤主题: 我行我“速” 设计师:Amelia_0503 返回首页