四数之和的一些判断怎么记忆

理解去重判断中的边界条件

这个问题问的是在 fourSum 函数中两处去重判断的条件为什么要设定特定的边界值:

  1. if i > 0 and nums[i] == nums[i - 1]
  2. if j > i + 1 and nums[j] == nums[j - 1]

关键解释

这两个条件的目的是为了跳过重复元素,确保结果中不包含重复的四元组,同时边界检查是为了防止数组越界。

第一个条件 if i > 0 and nums[i] == nums[i - 1]

  • i > 0 是因为我们需要确保有一个前一个元素 nums[i-1] 可以比较。如果 i = 0,那么 i-1 会导致索引越界。
  • 当前元素 nums[i] 与前一个元素 nums[i-1] 相同时,跳过当前元素,因为使用相同的数字作为第一个数会导致重复的四元组。

第二个条件 if j > i + 1 and nums[j] == nums[j - 1]

  • j > i + 1 确保 j 不是 i 后的第一个元素。因为 j 的初始值是 i+1,所以只有当 j 至少是 i+2 时,才需要考虑跳过重复。
  • j = i+1 时,它是该轮循环中的第一个元素,没有必要跳过。

快速记忆的方法

  1. 首元素判断 : 对于第一个元素,只需确保不是第一轮 (i > 0) 就可以和前一个比较。
  2. 内层循环判断 : 对于内层循环,需要确保不是该轮的第一个元素 (j > i+1) 才进行比较。

简单记忆:"外层看是否为0,内层看是否为起点的下一个"

实际例子

考虑数组 [1,1,2,2,3,3],target = 8:

  • i = 0 时,我们处理第一个 1
  • i = 1 时,由于 nums[1] = nums[0],我们跳过(避免重复)
  • 类似地,在内部循环中,当我们处理第一个 2 后,会跳过第二个 2

这样可以确保结果中不会有重复的四元组。