day7(hash表)● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和

博客分享了4道算法题的解题思路。454题用map存储a+b和的出现次数;383题用数组映射字母出现次数判断能否构成字符串;15题用双指针法解决三数之和问题,注意去重;18题是三数之和的扩展,多套一层循环。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

454

还是第一眼四层for,但学了hash表以后肯定不能当for哥了,首先数组不行,因为整数的范围太大,那么就考虑用map还是set,因为这题要返回等于零的数量,所以要用map,首先我们遍历A和B数组,将a+b的和出现的次数存入map,然后我们在遍历c和d数组,如果0-c-d在map中出现过,则取出value的值,最后用count来返回就可以了。e0d26026713a463090f8bf17968eb769.png

383

这个和字母异位词差不多,用数组,只不过这个是判断 第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成,我们可以遍历字符串1然后在数组中做一个字母出现次数的映射--,然后遍历字符串2,做++,最后遍历数组,如果值都大于等于零则返回true,否则返回false

90729855c96b45b382e106d02cadc499.png

15

刚开始做三数之和问题的时候,因为学的hash所以就想要hash来做,但写完之后一直报错,可能是边界和去重没做好,然后看了卡尔的视频,发现用双指针更好,看完思路就coding了,发现想出这方法的还真是个天才 ,定义一个左指针l和右指针r,遍历nums,根据这三个数的和来移动左右指针,思路就是这样,去重也很重要,第一个元素的去重是用nums[i]==nums[i-1]来判断的,第二个和第三个则是用左右指针来实现

c64ac81899324dc68289c8b94700f707.png

 18

我觉得这个就是三数之和的扩展版,也就是在外面在套一层循环来表示第一个数,其他的和三数之和基本一样。

e5f39cb6c7cb4a06aef459ae68a436e6.png

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值