代码随想录训练营 Day 7 | 哈希表法2 + 双指针法2

1.哈希表法(续)

典例1: LeetCode 454 454. 四数相加 II - 力扣(Leetcode)

联想:首先这道题从本质上讲,和LeetCode 1 两数之和是比较接近的。

         宏观来看,两道题都是从每个数组中取出一个数,从而满足某一个特定和。

        由此,不难想到,解题方法由哈希表map入手。

        同两数之和的解决方案,我们需要取一个数组做哈希映射,其它数组进行遍历

        小tip : 如果是1+3的情况,时间复杂度确实比较高,不如2+2的性能好。

        另外,两数之和的value记录的是下标位置,而本题的value记录出现次数,这完全是由题目要求决定的,和具体的解题策略、思路等无关,不应成为思考的干扰项。

    备注:清晰的思路以及......不是很熟练的语言用法——已经提前预定二刷了。

典例2: LeetCode 383     383. 赎金信 - 力扣(Leetcode)

备注:没什么好说的......和 LeetCode242一模一样。 

 2.双指针法(续)

典例1:LeetCode 15 15. 三数之和 - 力扣(Leetcode)

 联想:区别于454,本题总共只给了一个数组进行查询,而454则是每个元素来自一个数组。

            对于一个数组内的“搜索问题”,运用双指针可能会方便一些(诸如滑动窗口之类的)。

 备注:这道题细节满满,去重之路可谓道阻且长

            1.先做递增,以首元素大于0作为结束条件,减少了无端的遍历,是想不到但好用的技巧。

            2.首元素nums[i]去重时,前比(nums[i - 1])和后比(nums[i + 1])效果不同。

                如果是后比,当 i 遍历到与 left 临近时,会排除掉nums[i]和nums[left]相同的可能。

             (这个可能算是隐藏boss级bug, 一般人很难想到,可谓叹服)

            3.left 和 right 的去重,要写在取值之后。

               因为要确保已收罗一个可能结果,避免遗漏。(如000000的情况)

同例4: LeetCode 18 18. 四数之和 - 力扣(Leetcode)

备注:延续15.三数之和的思路,无非是剪枝和去重的成分考虑。

          很容易忽略的条件是,由于负数的原因,剪枝操作要附加 target > 0。

            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值