第六天| 454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和

内容分享2周前发布
0 0 0

454.四数相加II 

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。

思路:转为两数之和就好。AB相加的和放入一个set,然后计算-(C+D)看是否在set中

第六天| 454.四数相加II  383. 赎金信  15. 三数之和  18. 四数之和

383. 赎金信 

给定一个赎金信 (ransom) 字符串和一个杂志(magazine)字符串,判断第一个字符串 ransom 能不能由第二个字符串 magazines 里面的字符构成。如果可以构成,返回 true ;否则返回 false。

思路:赎金信里,每个字母的数量都比杂志少就可以了。

第六天| 454.四数相加II  383. 赎金信  15. 三数之和  18. 四数之和

15. 三数之和 

给定一个长度超过3的数组,返回所有的三数组合 [nums[i], nums[j], nums[k]] such that i != j, i != k, and j != k, and nums[i] + nums[j] + nums[k] == 0. 答案中不含重复的三数组合。

思路:

1.第一必须排序。

2. 三个数,每个数一层循环,O(n**3);时间复杂度太高,思考用双指针少一层循环。left right初始化为 i+1, n-1;三数相加大于0则right–;三数相加小于0则left++ 

3. 去重问题:第一层,如果数字与前一个数字一样,则跳过。第二层,只有当三数和为0的时候,才需要思考去重。此时left++ right–,如果下一个数相等,就一直移动到不等为止。

第六天| 454.四数相加II  383. 赎金信  15. 三数之和  18. 四数之和

18. 四数之和 

将上一题的三数之和拓展为四数之和。

思路:

1.三数组合是一层for循环,加一层左右指针。四数组合可以两层for循环,加一层左右指针。

第六天| 454.四数相加II  383. 赎金信  15. 三数之和  18. 四数之和

以下是卡哥资料

454.四数相加II 

提议:本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序执行效率,降低时间复杂度,当然使用哈希法 会提高空间复杂度,但一般来说我们都是舍空间 换时间, 工业开发也是这样。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html 

 383. 赎金信  

提议:本题 和 242.有效的字母异位词 是一个思路 ,算是拓展题 

题目链接/文章讲解:https://programmercarl.com/0383.%E8%B5%8E%E9%87%91%E4%BF%A1.html

 15. 三数之和 

提议:本题虽然和 两数之和 很像,也能用哈希法,但用哈希法会很麻烦,双指针法才是正解,可以先看视频理解一下 双指针法的思路,文章中讲解的,没问题 哈希法很麻烦。 

题目链接/文章讲解/视频讲解:https://programmercarl.com/0015.%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C.html

 18. 四数之和  

提议: 要比较一下,本题和 454.四数相加II 的区别,为什么 454.四数相加II 会简单许多,这个想清楚了,对本题理解就深刻了。 本题 思路整体和 三数之和一样的,都是双指针,但写的时候 有许多小细节,需要注意,提议先看视频。 

题目链接/文章讲解/视频讲解:https://programmercarl.com/0018.%E5%9B%9B%E6%95%B0%E4%B9%8B%E5%92%8C.html

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...