算法训练营第十四天 | 四数之和
今日训练题18. 四数之和总体思路先对数组排序方便双指针移动和去重固定两个数i、j 两层循环用左右双指针找剩下两个数凑成和为 target全程去重避免重复四元组提前剪枝没必要的循环直接跳过代码如下总结1. 为什么要排序双指针必须在有序数组上才能工作和小左移、和大右移方便去重相同数字会挨在一起方便剪枝快速判断最小 / 最大组合。2. 为什么要强转longint范围有限四个大数相加会溢出变成负数导致判断错误。(long)把其中一个数转成长整型整个加法就会用长整型计算。3. 四层去重逻辑i 去重nums[i] nums[i-1]跳过j 去重nums[j] nums[j-1]跳过left 去重找到答案后跳过重复左指针right 去重找到答案后跳过重复右指针。作用保证最终结果没有重复的四元组。4. 四层剪枝优化效率提前判断不可能满足条件的情况直接跳过 / 退出循环减少无效计算最小四数和 target → 后面更大直接退出当前 i 最大三数 target → i 太小换下一个ij 最小两数 target → 退出ij 最大两数 target → j 太小换下一个。5. 双指针逻辑left从 j1 开始第三个数right从末尾开始第四个数sum target→ 左指针右移变大sum target→ 右指针左移变小sum target→ 记录答案 去重 移动指针。题目链接https://leetcode.cn/problems/4sum/ 视频讲解https://www.bilibili.com/video/BV1DS4y147US