打卡第十四天 | 18.四数之和
2026/4/27 1:01:55 网站建设 项目流程

题目链接:https://leetcode.cn/problems/4sum/ 视频讲解:https://www.bilibili.com/video/BV1DS4y147US

题目描述:

解题思路

和三数之和类似,核心思路是排序 + 双指针

  1. 排序:先把数组排序,方便后续去重和双指针操作。
  2. 固定前两个数:用两层循环固定前两个数nums[i]nums[j],问题转化为:在j之后的区间中,找两个数的和等于target - nums[i] - nums[j]
  3. 双指针找剩余两数:用leftright指针从剩余区间的两端向中间移动,寻找满足条件的数对。
  4. 去重处理:对ijleftright四个位置的重复值进行跳过,避免输出重复的四元组。
  5. 剪枝优化:利用排序后的单调性,提前跳过不可能满足条件的情况,提升效率。

关键细节说明

  1. 去重逻辑

    • iif i > 0 and nums[i] == nums[i - 1]: continue,避免和上一次的数重复。
    • jif j > i + 1 and nums[j] == nums[j - 1]: continue,从i+1开始去重。
    • left/right:找到一组解后,跳过所有重复值再移动指针,避免生成重复的四元组。
  2. 剪枝优化利用排序后的数组单调性,提前判断当前i/j对应的最小和与最大和:

    • 若最小和已经大于target,后续的和只会更大,直接break
    • 若最大和已经小于target,当前i/j无法满足条件,直接continue
  3. 溢出问题Python 的int不会溢出,因此无需像 C++ 那样手动转换为long long,直接相加即可。

解题代码:

测试案例:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询