代码随想录 day07 四数相加 赎金信 三数之和 四数之和

发布时间 2024-01-03 01:49:58作者: 又见鸣蜩

四数相加

题目需要找满足和为0的四元组 但是只要求统计个数 不要求具体的四元组
而且四元组是可以重复的 考虑使用hash map
由于设计到四个元素
先遍历两个集合 记录一下两个集合的元素和的所有可能值
记录在map中 为什么要用map 因为需要同时记录出现的值和出现的次数 值作为键 次数作为值

然后再遍历一遍剩下两个集合的所有可能值
如果 target-(k + m) == i + j
就是说明存在一个这样的四元组
count计数器自增

赎金信

本质上跟字母异位词是一个思路
先放map里对应位置的字母++
然后另一个集合--
如果大于0说明不满足
应该用数组模拟会更节省空间一些

三数之和

题目和四数相加最大的区别就是加上了元素不能重复的条件
这样就不能简单的像之前的hash map的解决思路 因为会重复

这题先对数组排序,因为不需要返回数组下标
然后利用双指针进行收缩
注意nums[i] 要与 nums[i - 1]进行比较去重

但是对于去重的逻辑十分的复杂 目前也没有太搞明白 需要mark一下 周日复盘一下

四数之和

这题一样要求是不重复的四元组

hash map依然是去重逻辑十分的麻烦
考虑使用双指针进行收缩
整体思路和三数之和一样
但是剪枝的时候
要考虑到target nums[i] nums[i - 1] 都是负数的情况下
剪枝只能在正数的时候剪枝 负数不能这样子剪
四元组比较大 判断部分需要转换成long类型