关注
1. 算法如下:根据快速排序划分的思想 (1) 递归对所有数据分成[a,b)b(b,d]两个区间,(b,d]区间内的数都是大于[a,b)区间内的数 (2) 对(b,d]重复(1)操作,直到最右边的区间个数小于100个。注意[a,b)区间不用划分 (3) 返回上一个区间,并返回此区间的数字数目。接着方法仍然是对上一区间的左边进行划分,分为[a2,b2)b2(b2,d2]两个区间,取(b2,d2]区间。如果个数不够,继续(3)操作,如果个数超过100的就重复1操作,直到最后右边只有100个数为止。 2.先取出前100个数,维护一个100个数的最小堆,遍历一遍剩余的元素,在此过程中维护堆就可以了。具体步骤如下: step1:取前m个元素(例如m=100),建立一个小顶堆。保持一个小顶堆得性质的步骤,运行时间为O(lgm);建立一个小顶堆运行时间为m*O(lgm)=O(m lgm); step2:顺序读取后续元素,直到结束。每次读取一个元素,如果该元素比堆顶元素小,直接丢弃 如果大于堆顶元素,则用该元素替换堆顶元素,然后保持最小堆性质。最坏情况是每次都需要替换掉堆顶的最小元素,因此需要维护堆的代价为(N-m)*O(lgm); 最后这个堆中的元素就是前最大的10W个。时间复杂度为O(N lgm)。 3.分块查找 先把100w个数分成100份,每份1w个数。先分别找出每1w个数里面的最大的数,然后比较。找出100个最大的数中的最大的数和最小的数,取最大数的这组的第二大的数,与最小的数比较。。。。
查看原帖
点赞 评论
相关推荐
会非的杨:吓死了,看到我的评论以为自己被网暴了,那哥们说白了就是吃了黑流量还要倒打一耙喷他的,自己都说了想吃黑流量,然后又说网友不友好,md这不左右脑互搏吗,拿个蓝桥杯省二说要冲大厂,起号和父母不能同时存在 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 校招生月薪1W算什么水平 #
33703次浏览 188人参与
# 哪一瞬间觉得自己长大了 #
38131次浏览 493人参与
# “vivo”个offer #
38631次浏览 280人参与
# 我是面试官,请用一句话让我破防 #
26389次浏览 128人参与
# vivo工作体验 #
27816次浏览 124人参与
# 如果上班像打游戏,你最想解锁什么技能 #
8044次浏览 70人参与
# 工作后明白的那些道理 #
21628次浏览 225人参与
# 一人一个landing小技巧 #
123779次浏览 1441人参与
# 实习最想跑路的瞬间 #
87347次浏览 542人参与
# 中美关税战对我们有哪些影响 #
42847次浏览 361人参与
# 机械制造2023笔面经 #
149451次浏览 840人参与
# 如果重来一次你还会读研吗 #
201512次浏览 1932人参与
# AI时代,哪些岗位最容易被淘汰 #
3252次浏览 27人参与
# 中美关系回暖,你会选择出海吗? #
6537次浏览 107人参与
# 华为保温 #
107448次浏览 406人参与
# 哪些行业值得去? #
5251次浏览 50人参与
# i人适合做什么工作 #
11279次浏览 97人参与
# 美团开奖 #
221451次浏览 1142人参与
# 读研or工作,哪个性价比更高? #
78137次浏览 768人参与
# 如果秋招能重来,我会____ #
37172次浏览 299人参与
# 华为池子有多大 #
110424次浏览 750人参与

查看14道真题和解析