关注
看了下发的第二题题意,刚写了段代码,时间复杂度O(nlogn),虽然常数会大些,但感觉应该没问题。
思路:一个map<ll,set<int>>,记录数组中值为x的下标序列,为了保证下标有序,将下标序列存入set。同时用一个新的set,这里称为set1来维护有重复的数字。
1. 遍历数组,更新map和set1,时间复杂度不超过O(nlogn)。
2. 只要set1非空,说明还有重复数字,取set1中最小的值x(set有序,就是取set的begin,时间复杂度O(logn)),然后查map中的x,若存在,那么执行题目中的操作,即删去x在map中对应的set的第一个元素(即该set的begin,其必然是重复的x中下标最小的),然后获取第二个元素pos(即删除后的第一个元素,代表该x在原数组中的下标),将key=2*x插入到map中,value=pos插入到对应的key对应的set中,这样就维护了相同元素的前后位置这一问题。然后再删去第二个元素(同样是set的begin,因为前面把第一个删去了)。若删除后,x对应的set的大小size<2,那么就从set1中删去x(因为set1只维护数字),此外,若size==0,那么删除map中x对应的key-value。以上一轮维护,涉及到删除和插入,不过由于都是在set或map中插入和删除,因此复杂度为O(4 logn),考虑到n轮后必然会没有重复数字,因此维护的复杂度为O(nlogn)。
3. 当set1为空时,结束。这时map中所有key对应的set必然都只有一个元素。将新生成的pair对:<下标(key对应的set的第一个元素),元素值(key)>插入一个新的set中,set会自动按下标排序。复杂度<O(nlogn)。最后按序(即下标序)遍历set,输出元素值就是答案。
整体复杂度O(nlogn)。
字数限制,代码只能放图了...
查看原帖
点赞 评论
相关推荐
点赞 评论 收藏
分享
11-23 20:47
中国地质大学(武汉) Java
程序员牛肉:继续沉淀吧同学,你这就是纯纯的流水线产品。
差不多的学历+两个烂大街项目。自身学历又不行,现在找啥实习呢。有点太浮躁了。多花点心思搞搞ai,开源和八股。这比你这段时间捣鼓一段小厂实习要好得多; 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 工作半年后更确定:我们依然不欠优绩主义什么6104
- 2... 我建了一个分享实习业务的仓库,欢迎大家贡献哦3792
- 3... 岁末论道:谁才是牛客 2025 最强修仙者?3160
- 4... #牛客2025仙途报告#居然是五颗星2528
- 5... 腾讯 微信支付一面面经2517
- 6... 【2025-年终总结】25届毕业生果果牛这一年~2184
- 7... 仙途报告1964
- 8... 一个程序员的自救书|从酒吧陪玩DM到上岸大厂1918
- 9... 在当下这个社会,在人生这个无常的时代,我真心希望你和各位牛友开心1418
- 10... 壕壕壕,京东发7个月年终,此生要做东孝子1316
正在热议
更多
# 牛客2025仙途报告 #
12303次浏览 228人参与
# 实习要如何选择和准备? #
129802次浏览 1498人参与
# 2025年终总结 #
194344次浏览 3252人参与
# 你有哪些缓解焦虑的方法? #
44451次浏览 868人参与
# 上班后和你想的一样吗? #
95107次浏览 701人参与
# 元旦假期你打算怎么过 #
735次浏览 20人参与
# 找工作,行业重要还是岗位重要? #
87282次浏览 1741人参与
# 今年你最想重开的一场面试是? #
11819次浏览 125人参与
# 我们是不是被“优绩主义”绑架了? #
1575次浏览 60人参与
# 你面试体验感最差/最好的公司 #
28417次浏览 466人参与
# 一人说一个提前实习的好处 #
21974次浏览 300人参与
# 牛友们的论文几号送审 #
63087次浏览 833人参与
# 机械人晒出你的简历 #
148289次浏览 885人参与
# 礼物开箱Plog #
3077次浏览 100人参与
# 秋招落幕,你是He or Be #
22028次浏览 371人参与
# 没有合适的工作,你会先找个干着,还是考公考研 #
149230次浏览 1241人参与
# 牛油的搬砖plog #
163558次浏览 1151人参与
# 工作中听到最受打击的一句话 #
12288次浏览 172人参与
# 重来一次,你会对开始求职的自己说 #
9909次浏览 237人参与
# 实习没事做是福还是祸? #
23535次浏览 334人参与
顺丰集团工作强度 382人发布