代码随想录刷题思路与心得06|454. 383. 15. 18.

454.四数相加Ⅱ

        本题希望求四个相加为0的全部组合,但是这个题目和四数之和是不一样的,这个给了四个不同的list,并且他们长度相同。这就使得题目变得更简单了。直接看四数之和可能有些无从下手,但是如果题目只有nums1,nums2两个list,大家肯定都会做,就是遍历一下nums1,看看0-nums1里面的数是不是在nums2里面。那么四数之和其实和这个思路一样。我们可以把两个数的和看成一个数,这样四数之和就变成两个两数之和之和。那么首先就要计算两数之和,这个两个循环就可以完成。当我们计算完两数之和之后,我们要将结果存下来,成为新的一个nums。此时要用到哈希!我们既可以存下来和的数值,也可以存下来得到这个和的组合数量。那么后续判断就和两数之和一样了。题解如下:

 383.赎金信

        这道题思路非常明确,只要ransomNote是magazine的子集即可。那么实现的话,如果ransomNote和magazine的交集是ransomNote本身的话,就说明是它子集。为了能使用逻辑运算符,这里可以直接用Counter类。题解如下:

 

15. 三数之和 

        这道题难点在于不重复,这个和之前两数之和就完全不一样了。想要不重复,就得保证每次判断的就不会在后面再出现了。如果是两数之和,会简单许多。那么假设这道题是全部不重复的两数之和。求和本身很简单,就是难在不重复,那么如何保证不重复呢。就需要数组本身有一定规律性,让我们知道哪些找了,哪些没找。而排序就是一个最直观的提供规律的方法,因此之后看到不重复字样可以首选排序(前提是索引值没意义)。那么排序后,如果一个小的值判断完了,后面全部等于它的就都不用考虑了,一直到下一个大于他的才值得考虑。并且排序后,我们不必再担心第二个数等于第一个数而第一个数等于第二个数发生的重复了,因为大小顺序固定,必定不会重复。此时两数之和就解决了,但是在三数之和中,多了一个数字。那么我们可以先定下来一个数字,把问题变成两数之和,就可以了。那么具体做法就是先排序,然后固定一个数(遍历它)然后在剩下的里面做两数之和即可。题解如下:

18. 四数之和

 

会了三数之和,四数之和就简单多了。我们现在已经会做三数之和问题了,那么四数之和只需要固定其中一个数(遍历它)然后在剩下的里面做三数之和就好了。具体题解如下:

 

其它:

学习时长:3h

学习心得:再次巩固一些边界问题

学习链接:四数相加Ⅱ, 赎金信, 三数之和, 四数之和

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值