美文网首页
剑指Offer-29 TopN问题

剑指Offer-29 TopN问题

作者: 北国雪WRG | 来源:发表于2019-01-02 20:29 被阅读3次

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

TopN问题: 在一堆数里面寻找N个最值。

排序

将数全排序,找到前N个,复杂度为nlogn,但是如果数据量大,达到10G,那内存就炸了。

TreeSet:

利用TreeSet自动排序的,代码如下,复杂度应该是nlogn。treeset的大小始终控制在K以下,适合大量数据。

public class Solution {
    public ArrayList<Integer> GetLeastNumbers_Solution(int[] input, int k) {
        if(k>input.length) return new ArrayList<Integer>();
        TreeSet<Integer> set = new TreeSet<>();
        for (int i : input) {
            set.add(i);
            if(set.size()>k) set.remove(set.last());
        }
        return new ArrayList<Integer>(set);
    }
}

最小堆、最大堆:

TreeSet和最大最小堆孰优孰劣,涉及到了堆的调整和TreeSet内部的调整。我还没想明白。


image.png

https://www.nowcoder.com/questionTerminal/6a296eb82cf844ca8539b57c23e6e9bf

相关文章

  • 剑指Offer-29 TopN问题

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

  • TopN问题

    从1000个数中选择前50个大的数 TopN问题:堆排序思想:先从数组中选出前n个元素组成小根堆。然后遍历后续元素...

  • TopN问题

    TopN问题是Android面试中经常遇到的问题,集在一个很大的集合中找到前N大的树,如给出10亿个无序的整数集合...

  • 【MySql】分组topN问题

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:...

  • 剑指算法,无欲则刚,栈问题

    抛出问题 判断 '潇洒走一回|回一走洒潇' 是否是一个回文字符串,(当一个字符串正读反读都是同一个字符序列时,称之...

  • 剑指算法,无欲则刚,队列问题

    抛出问题 说小李爱上了班上的小丽同学,于是小李鼓起勇气问小丽要QQ号码,但小丽怎么可能轻易给他呢,于是小丽给了小李...

  • 剑指offer | 约瑟夫环问题

    约瑟夫环问题 0,1,2,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字,求最后...

  • 剑指offer 62 约瑟夫问题

    n个人, 每m个数就杀掉一个人 其实这是一个数学问题. 我们只关注活着的那个人(我们称之为幸运儿)的序号变化: 正...

  • 剑指

    遥望中原九点烟,风云直上七重天。 今朝再向江湖去,一剑流星谁比肩? 2011.10(1488)

  • 剑指

    1. 二维数组中查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照...

网友评论

      本文标题:剑指Offer-29 TopN问题

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