打卡第十四天 | 18.四数之和
题目链接https://leetcode.cn/problems/4sum/ 视频讲解https://www.bilibili.com/video/BV1DS4y147US题目描述解题思路和三数之和类似核心思路是排序 双指针排序先把数组排序方便后续去重和双指针操作。固定前两个数用两层循环固定前两个数nums[i]和nums[j]问题转化为在j之后的区间中找两个数的和等于target - nums[i] - nums[j]。双指针找剩余两数用left和right指针从剩余区间的两端向中间移动寻找满足条件的数对。去重处理对i、j、left、right四个位置的重复值进行跳过避免输出重复的四元组。剪枝优化利用排序后的单调性提前跳过不可能满足条件的情况提升效率。关键细节说明去重逻辑对iif i 0 and nums[i] nums[i - 1]: continue避免和上一次的数重复。对jif j i 1 and nums[j] nums[j - 1]: continue从i1开始去重。对left/right找到一组解后跳过所有重复值再移动指针避免生成重复的四元组。剪枝优化利用排序后的数组单调性提前判断当前i/j对应的最小和与最大和若最小和已经大于target后续的和只会更大直接break。若最大和已经小于target当前i/j无法满足条件直接continue。溢出问题Python 的int不会溢出因此无需像 C 那样手动转换为long long直接相加即可。解题代码测试案例