哈希表刷题

383.赎金信:这道题和有效字母异位词很像,那道题是判断两个单词是否可以相互组成。而这道题是单向的,只用判断用magazine中的字母能否组成ransomNote即可,而不用关心ransomNote能否组成magazine。这道题做法与有效字母异位词完全一致。

15.三数之和:这道题如果用暴力的做法,会有五个题运行超时。所以肯定不能直接使用暴力解法。这道题棘手的问题在于:结果中不可包含重复的三元组。如果把符合的三元组加入结果集合result中,然后再去重;或者说将每个要加入的三元组的三个数字进行排序,确定和结果中已经存在的子集合不完全相同再加入都很复杂,很容易超时。

在进行判断的时候,比如集合{-1, 0, 1, 2, -1, -4},通过排序可以得到{-4, -1, -1, 0, 1, 2}。我们不希望出现两次(-1,0,1),但是-1可以在一个结果中出现两次,(-1,-1,2)。所以外层循环以-1为起点的时候,可以找到(-1,-1,2)和(-1,0,1)。但是当下一次,仍以-1为起点的时候,就可以省略此次的检查了。直接从以0为起点开始检查即可。

这个题的难点在于if(i>0&&nums[i]==nums[i-1]),这个不能写成if(i>0&&nums[i+1]==nums[i]),否则会遗漏(-1,-1,2)。

同理while(left<right&&nums[right]==nums[right-1])中left<right也必须要这么写。否则会遗漏(0,0,0)。

全部评论

相关推荐

06-26 10:10
已编辑
浙江理工大学 C++
6.20&nbsp;一面(1小时)1.自我介绍2-?都是c++的基础八股,不难,忘了,提一下记得的,oop三特性,多态,虚函数,动态数组,vector,插入频繁用什么,智能指针,类构造和析构顺序(抢答成员初始化顺序)?+1&nbsp;合并区间,应该是简单题?+2&nbsp;设计一个动态数组,包含添加插入删除元素的功能6.24&nbsp;二面(18分钟???)1.介绍一下校园或者是实习经历(没自我介绍)2.看你客户端,服务端,底层都有涉及,你更倾向于什么,为什么3.说c++八股一面问过了不问,问了爬楼梯4.有个画图功能,需要加入撤销恢复功能怎么设计5.一张a4纸上有若干点,每次查询随机给出一个圆心和半径,如何快速得到所有在圆内的点,答的自底向上的分块,引导自顶向下的分治6.&nbsp;一枚质地不均匀的硬币,也就是抛出正反面的概率不一样,两个人需要通过抛硬币决定谁赢,怎么设计规则比较公平啊,二面过了,等6.25三面+hr面6.25&nbsp;cto+hrbp(17分钟)1.&nbsp;对方自我介绍2.跟2面的2一样3.&nbsp;没八股,好像是问的项目中的某个问题,一开口就停不下来巴拉巴拉然后被打断了4.刚才提到实习中有搜索相关模块如果背包中有上万种物品,如何进行快速的搜索。5.&nbsp;现在是能立即到岗吗6.反问7.跟2差不多8.提到习惯为用户考虑,有没有具体的例子9.对业务了解怎么样10.期望薪资11.现在是住在xx区吗12.反问问到引擎熟悉度,坏,破绽了6.26&nbsp;三面过了,等安排终面
查看38道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务