剑指Offer-29 TopN问题

输入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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 今天是2017年8月17日 星期一 天气晴 欣赏自己:今天又学一招QQ引流,觉得也很不错。 欣赏队友:大神,感觉他...
    024f25cb2c00阅读 199评论 0 0
  • 沈北和李悦第二天就赶回了剧组,安溪见了李悦,也不说话,视而不见地走过。李悦只能摇着尾巴上前讨好。 “安少,...
    嗯咦啊哦阅读 639评论 0 2
  • 我是tonyhi,90后,生于江西某县城。 这座县城人口总计42w;在拆迁之前,我们一家三口在县高中老师公寓的两层...
    tonyhi阅读 1,124评论 0 0
  • 文/如雨随行 前方有条河 河水清清泛微波 天上白云朵朵 水中倒影一个 鱼儿自在游 人影随波动 好想有艘船 船上载你...
    如雨随行阅读 277评论 5 11
  • 从Dar Es Salam到Morogoro,再到Iringa,我们几乎快横穿了整个坦桑尼亚,也从最繁华穿越到了最...
    Riemann_Jin阅读 9,530评论 5 14

友情链接更多精彩内容