视频链接:
文字链接:
一、454 四数相加II(代码随想录哈希表中的第四题)
1.讲解
本题是 使用map 巧妙解决的问题,好好体会一下 哈希法 如何提高程序执行效率,降低时间复杂度,当然使用哈希法 会提高空间复杂度,但一般来说我们都是舍空间 换时间, 工业开发也是这样。
2.笔记
整体思路
四数相加VS四数之和
题目要求:给我们四个数组,要求在四个数组中分别找出一个元素,使这四个元素相加等于零,凑出四元组。能找到几组,返回数量。
- 不需要考虑去重的操作:0000 0000 0000 0000 这道题目不用考虑去重,因为是存放在数组里的四个元素
解题思路:哈希表的经典方法。有效数组异位词时,
暴力解法:四个for循环遍历。
A
B
C
D
a+b
只会考虑set或者map,还要统计a+b出现过多少次,然后和c+d做一个映射,不仅要统计是否出现过,还要统计出现次数,还需要一个value,此时我们需要的是一个map。
key:a+b value 3 0-(c+d)有没有出现在这个
map解题过程
注意事项
代码实现
总结
3.伪代码记录
4.可运行代码(待补充)
二、383 赎金信
三、15三数之和
整体思路
a+b-0
map
要去重
for(a )
for(b )
(a+b)
一种解法——双指针法
数组里找三元组a+b+c=0
【】【】【】【】【】【】
i left right
nums[i] + nums[left] + nums[right] > 0 right-- <0 left++ =0 收获结果 result
代码实现
result /*结果集*/
sort(nums);
for (i = 0; i < nums.size; i++)
if (nums[i] > 0 ) return
nums[i] == nums[i + 1]
nums[i] == nums[i - 1]