
本文详解 LeetCode 三数之和问题中双指针解法的常见陷阱,重点指出 R += 1 导致的数组越界错误,并提供修复后的完整、健壮实现,涵盖去重逻辑、边界条件处理及代码优化要点。
本文详解 leetcode 三数之和问题中双指针解法的常见陷阱,重点指出 `r += 1` 导致的数组越界错误,并提供修复后的完整、健壮实现,涵盖去重逻辑、边界条件处理及代码优化要点。
在使用双指针法求解「三数之和」(LeetCode #15)时,一个极易被忽略但后果严重的错误是:当两数之和大于目标值时,本应将右指针 R 向左移动(即 R--),却误写为 R++。这不仅违背双指针收缩逻辑,更直接导致 R 超出数组右边界(如 nums.length = 6 时 R 可能变为 6,而合法索引仅为 0~5),从而触发 ArrayIndexOutOfBoundsException。
以下是修正后的标准实现(关键修复已在注释中标出):
class Solution {
public List<list>> threeSum(int[] nums) {
if (nums == null || nums.length ();
Arrays.sort(nums);
List<list>> ans = new ArrayList();
for (int i = 0; i <p><strong>关键注意事项与最佳实践:</strong> </p>
<ul>
<li>✅ <strong>边界检查前置</strong>:在进入主循环前,先校验 nums == null || nums.length </li>
<li>✅ <strong>去重逻辑安全</strong>:while 中的 L 0(或与 L </li>
<li>✅ <strong>指针移动方向严格对应逻辑</strong>:左指针 L 增大值 → L++;右指针 R 减小值 → R--。切勿混淆 += 与 -=。 </li>
<li>✅ <strong>排序是前提</strong>:双指针依赖有序性,Arrays.sort(nums) 不可省略。 </li>
</ul>
<p>该解法时间复杂度为 O(n²)(外层循环 n,内层双指针 n),空间复杂度 O(1)(不计结果存储),是解决 3Sum 的最优经典方案。掌握此模式,可快速迁移至 4Sum、Two Sum II 等同类问题。</p></list></list>











