四数之和的一些判断怎么记忆
理解去重判断中的边界条件
这个问题问的是在 fourSum
函数中两处去重判断的条件为什么要设定特定的边界值:
if i > 0 and nums[i] == nums[i - 1]
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
时,它是该轮循环中的第一个元素,没有必要跳过。
快速记忆的方法
- 首元素判断: 对于第一个元素,只需确保不是第一轮 (
i > 0
) 就可以和前一个比较。 - 内层循环判断: 对于内层循环,需要确保不是该轮的第一个元素 (
j > i+1
) 才进行比较。
简单记忆:“外层看是否为0,内层看是否为起点的下一个”
实际例子
考虑数组 [1,1,2,2,3,3]
,target = 8:
- 当
i = 0
时,我们处理第一个1
- 当
i = 1
时,由于nums[1] = nums[0]
,我们跳过(避免重复) - 类似地,在内部循环中,当我们处理第一个
2
后,会跳过第二个2
这样可以确保结果中不会有重复的四元组。