代码随想录第五天

454.四数相加

思路:代码随想录

思路:使用unordered_map来存放A+B的值以及出现的次数,本题无需去重。接着在遍历C+D数组找到0-(c+d)。因为0-(c+d) = a+b。如果这个目标值在map出现过 计数器就加上key所对应的value。

383.赎金信

思路:代码随想录

思路:定义一个大小为26的数组并初始化为0来映射小写字母。数组是本题最合适的数据结构。先把杂志出现的字母映射到数组中,再把赎金信中出现的字母在数组中做减减,如果发现当前遍历到的字母在数组中的值为负数说明没有出现过直接返回false。

15.三数之和

思路:代码随想录

思路:本题使用双指针。定义一个left指向i+1,right指向数组最后一个元素。

依然还是在数组中找到 abc 使得a + b +c =0,我们这里相当于 a = nums[i],b = nums[left],c = nums[right]。

接下来如何移动left 和right呢, 如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了,因为数组是排序后了,所以right下标就应该向左移动,这样才能让三数之和小一些。

如果 nums[i] + nums[left] + nums[right] < 0 说明 此时 三数之和小了,left 就向右移动,才能让三数之和大一些,直到left与right相遇为止。

对i去重需要判断i和i-1是否相等。对 b,c去重要先至少收获一个结果之后再去重 判断left和left+1是否相等 是的话就left++,right是否和right-1相等 是的话就right--。最后 两个指针同时向中间移动。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值