最小的K个数, 问题提问

最小的K个数这道题

题目链接: https://www.nowcoder.com/practice/6a296eb82cf844ca8539b57c23e6e9bf?tpId=188&tqId=38279&rp=1&ru=%2Factivity%2Foj&qru=%2Fta%2Fjob-code-high-week%2Fquestion-ranking&tab=answerKey

为什么时间复杂度为nlog(n)的方法比nlog(k)的方法要快呢?

方法1:

将所有元素都添加到堆中, 之后输出前k个, 时间复杂度为nlog(n), 但是提交时间仅为14ms

public ArrayList GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList res = new ArrayList();
        if(input == null || input.length < k || k == 0){
            return res;
        }
        PriorityQueue queue = new PriorityQueue();
        for(int num : input){
            queue.add(num);
        }
        for(int i = 0; i < k ; i++){
            res.add(queue.poll());
        }
        return res;

    }

方法2:

将前k个元素添加到大顶堆中, 接下来把后面的元素依次和堆元素比较, 比堆顶元素小就把堆顶元素去掉, 添加当前元素, 时间复杂度为nlog(k), 但是提交的时间却为90多ms, 经过多次测试的结果, 有大佬可以解释一下为什么嘛?

public ArrayList GetLeastNumbers_Solution(int [] input, int k) {
        ArrayList res = new ArrayList();
        if(input == null || input.length < k || k == 0){
            return res;
        }
        PriorityQueue queue = new PriorityQueue((o1,o2) -> {
            return o2 - o1;
        });
        for(int i = 0; i < input.length ; i++){
            if(i< k){
                queue.add(input[i]);
            }else if( queue.peek() > input[i]){
                Integer temp = queue.poll();
                temp = null;
                queue.add(input[i]);
            }
        }
        for(int i = 0; i < k ; i++){
            res.add(queue.poll());
        }
        return res;
    }

有大佬可以解释一下原因嘛?? 非常感谢

#笔试题目#
全部评论

相关推荐

03-17 23:54
黑龙江大学 Java
来个白菜也好啊qaq:可以的,大厂有的缺打手
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-19 10:38
实力求职者:真的绷不住了,第一张霸总人设,第二张求生欲拉满
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# AI面会问哪些问题? #
24308次浏览 477人参与
# 中国电信笔试 #
30930次浏览 283人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
13979次浏览 208人参与
# 你的实习产出是真实的还是包装的? #
18515次浏览 329人参与
# 如果秋招能重来,我会____ #
96448次浏览 499人参与
# 春招至今,你的战绩如何? #
59119次浏览 535人参与
# 米连集团26产品管培生项目 #
12907次浏览 285人参与
# i人适合做什么工作 #
36646次浏览 123人参与
# 我是面试官,请用一句话让我破防 #
79291次浏览 219人参与
# 哪些公司真双非友好? #
69122次浏览 287人参与
# 找AI工作可以去哪些公司? #
7473次浏览 177人参与
# 从事AI岗需要掌握哪些技术栈? #
7465次浏览 235人参与
# 五一之后,实习真的很难找吗? #
102791次浏览 584人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
339717次浏览 2163人参与
# 你做过最难的笔试是哪家公司 #
29501次浏览 179人参与
# 你小时候最想从事什么职业 #
159826次浏览 2072人参与
# 阿里笔试 #
175963次浏览 1299人参与
# 金三银四,你的春招进行到哪个阶段了? #
21407次浏览 274人参与
# 一张图晒出你司的标语 #
3779次浏览 71人参与
# 面试被问期望薪资时该如何回答 #
382432次浏览 2163人参与
# 晶盛机电求职进展汇总 #
35209次浏览 318人参与
# 应届生第一份工资要多少合适 #
20440次浏览 84人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务