题目链接:
https://leetcode.cn/problems/4sum/
视频链接:
https://www.bilibili.com/video/BV1DS4y147US
我的代码:
https://leetcode.cn/problems/4sum/submissions/721320141
看到题目的第一想法:
- 看到四数之和,第一时间联想到写过的三数之和,知道整体框架是:先排序+固定前两个数+后两个数用双指针查找。
- 对比昨天的四数相加,我发现到两道题完全不一样:
(1)四数相加是四个独立数组、不用去掉重复、只统计个数;
(2)这题是同一个数组内选四个元素、需要去掉重复、返回具体的组合,不能用哈希做,只能依靠排序+双指针。
做题过程中遇到的困难:
- 边界不好把控,数组元素有负数,不能直接用普通大小判断剪枝;
- 去重细节麻烦:第一层、第二层固定元素要去重,左右指针移动时也要跳过重复值;
- 指针容易写错,left和right移动时机判断失误,导致漏解或重复解。
今日收获
- 区分了四数之和与四数相加II的核心区别:
四数相加:多数组、不计顺序、无需去重;
四数之和:单数组、组合去重、返回集合。 - 去重、指针移动顺序、负数场景剪枝都是易错点。