美文网首页
最小的K个数

最小的K个数

作者: ElricTang | 来源:发表于2019-11-13 16:42 被阅读0次

《剑指offer》刷题笔记。如有更好解法,欢迎留言。

关键字:数组 高级排序

题目描述:

输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。

思路:

  • 可以使用堆排序或者快速排序。
  • 我这里维护一个最小堆


    初始化
    堆为空,直接进入
    堆还为未满,根据大小关系添加到上面或下面
    添加到底部
    添加到顶部
    堆已满,而且顶部最大,将顶部移除再添加
    重排堆,保证上面最大
    比堆顶都大的元素直接跳过
    同理,替换堆顶
    重排堆
    遍历完成,输出堆
  • 完整代码
function GetLeastNumbers_Solution(input, k)
{
    if(input.length === k){
        return input.sort();
    }else if(input.length < k){
        return [];
    }
    if(k === 0){
        return [];
    }
    let arr = [];
    for(let i = 0;i < input.length;i++){
        if(arr.length === 0){
            arr.push(input[i]);
        }else if(arr.length < k){
            if(input[i] > arr[arr.length-1]){
                arr.push(input[i]);
            }else{
                arr.unshift(input[i]);
            }
        }else if(arr.length === k){
            if(input[i] < arr[arr.length-1]){
                arr.pop();
                arr.push(input[i]);
            }
            arr.sort();
        }
    }
    return arr;
}

相关文章

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

  • 最小的k个数

    问题描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 最小的k个数

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3...

  • 最小的K个数

    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1...

  • 最小的k个数

    参考: [1] https://www.nowcoder.com/questionTerminal/6a296eb...

  • 最小的K个数

    输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。

  • 最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是...

  • 最小的k个数

    问题:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,...

  • 最小的k个数

    题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1...

  • 最小的K个数

    import java.util.Scanner; public class GetLestNumbers { }

网友评论

      本文标题:最小的K个数

      本文链接:https://www.haomeiwen.com/subject/edfkictx.html