Java 为什么3和算法只查看特定数字右侧的子数组?

Java 为什么3和算法只查看特定数字右侧的子数组?,java,arrays,algorithm,sorting,Java,Arrays,Algorithm,Sorting,我正在看一段代码,它通过构建2sum解决方案来解决3sum问题。为什么低应该是intlo=index+1?这是否意味着当我们观察子阵列时,我们只对目标右侧的数字之和感兴趣?目标左边的数字是多少 类解决方案{ 公共列表三和(int[]nums){ if(nums==null | | nums.length

我正在看一段代码,它通过构建2sum解决方案来解决3sum问题。为什么低应该是
intlo=index+1
?这是否意味着当我们观察子阵列时,我们只对目标右侧的数字之和感兴趣?目标左边的数字是多少

类解决方案{
公共列表三和(int[]nums){
if(nums==null | | nums.length<2){
返回新的ArrayList();
}
列表结果=新建ArrayList();
数组。排序(nums);

对于(int i=0;i,因为对于位于
i
位置的每个数字
num[i]
,您可以在数组
[i+1…N]
上使用2-sum算法来查找两个数字,使它们的和等于
-num[i]
,这意味着3个数字的和为0

例如

让数组为
[-1,0,1,2,-1,-4]

该算法将发现
[0,1,2,-1,-4]
中的任何2-和等于
1

然后它会发现
[1,2,-1,-4]
中的任何2-和等于
0

等等

现在,在搜索
num[i]
的2-和时,可以看到子数组的起点是
i+1
,这就是为什么
int lo=index+1


搜索是穷举的,所以所有和等于
0
的元组都会被找到。

因为目标在目标左边的任何数字的右边。
结果。addAll(twoSum(nums,i))
…为什么他们要将i+1传递给这个方法,i左边的数字呢?想象数组是
{A,B,C,D}
其中每个字母代表一个数字。所以当
threeSum
到达a时,它将询问
twoSum
a是否与
B+C
B+D
一起工作。现在当
threeSum
到达B时,我们是否关心a?不!我们已经检查了B是否与a一起工作。这正是我遇到的问题。为什么我们不关心a关于A?是否存在A+C=B的组合?如果不是,原因是什么?哦,3和问题的要点是找到任何三个加起来等于零的数字,即
A+B+C=0
。注意
目标是
-nums[index]
。因此,您正在查找与
A+B+C=0
相同的
-A=B+C
。然后您将查找
-B=A+C
,这也是
A+B+C=0