Java——Stream流
2026/4/27 2:31:38
题目链接: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四个位置的重复值进行跳过,避免输出重复的四元组。去重逻辑
i:if i > 0 and nums[i] == nums[i - 1]: continue,避免和上一次的数重复。j:if j > i + 1 and nums[j] == nums[j - 1]: continue,从i+1开始去重。left/right:找到一组解后,跳过所有重复值再移动指针,避免生成重复的四元组。剪枝优化利用排序后的数组单调性,提前判断当前i/j对应的最小和与最大和:
target,后续的和只会更大,直接break。target,当前i/j无法满足条件,直接continue。溢出问题Python 的int不会溢出,因此无需像 C++ 那样手动转换为long long,直接相加即可。
解题代码: