代码随想录冲冲冲 Day7 哈希表part02

454. 四数相加 II

四个数相加比起四个数和要简单很多,其中就包括不需要考虑去重等等问题,

相加时候只要分两个for loop,一个用来求前两个数的合,并把这些值放到map中,

map的key是数值,value是出现的次数。在后两个数求和的时候,去map中查找 (0 - 求和值)的值的出现次数。最后通过totalcount累加起来得到最后的答案。

383. 赎金信

在判断完notesize>magazinesize后,使用magazine去添加字典,在使用note起减少字典中的个数

如果一个key的value在减少后小于0,代表个数不够,返回false。

15. 三数之和

哈希表方法:

在排序后,首先对于第一个数字(a)进行剪枝筛选,当排序后第一个数字大于0是直接返回。

当开头一样时,需要跳过。之后就是对于(b)(c)数字进行去重,

对于b这个数,由于可能会出现类似于-2,1,1这样的情况 所以不能单纯用nums[j] == nums[j-1]筛选,对于下面的c来说

其实每次的c都是之前添加进来的b,以 1 2 3为例子,在2在set中并没有找到时,会把2放入set中,直到后面c等于2的情况,就把set中的2去掉,形象一点的理解就是2这个元素用过了,就扣掉了,之后不能再使用了。

双指针的方法:

比起哈希表,双指针的方法就非常的直接。

在第一个数的筛选上是一样的,后面的逻辑

相当于在当前第一个数的后面有一个大的滑块,当值太大时候 右侧像左移 减小值,当值太小时,左侧向右移 增大值。在正好相等的时候,记录结果。之后两个while是用来过滤相同值的,但是由于right,left位置都在变所以我们要同时确认两个边界不会碰到。在确认完之后,缩小范围。假设left是a right是b,如果a b作为了答案,其他答案只有可能是有更大的a和更小的b一起组成的。

18. 四数之和

这个于3数和其实都差不多,只是又多了一层,由于target可能不为0了,所以会有稍微的变化。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值