桥西企业做网站,企业网站建设与网页设计,购买网店,企业网站建设咨询问题描述#xff1a;给你一个包含n个整数的数组nums#xff0c;判断nums中是否勋在三个元素a,b,c使得abc0,请你找出所有和为0且不重复的三元组。
求解思路#xff1a;如果使用for循环的方式#xff0c;n3的时间复杂度#xff0c;可以采用双指针的方式#xff0c;先将整个…问题描述给你一个包含n个整数的数组nums判断nums中是否勋在三个元素a,b,c使得abc0,请你找出所有和为0且不重复的三元组。
求解思路如果使用for循环的方式n3的时间复杂度可以采用双指针的方式先将整个数组进行排序然后通过for循环遍历这个排序后的数组index然后将其固定在后面定义两个start(当前index1)和end(末尾)进行遍历直到两者之和等于-nums[index],并保存我们的三元组该方法使得遍历过程不重复。
public ListListIntegerthreeSum(int []nums)
{
Arrays.sort(nums);
ListListIntegerresnew ListListInteger();
for(int i0;inums.length-2;i)
{
int startIndexi1;
int endIndexnums.length-1;
while(endindexstartIndex)
{
if(nums[startIndex]nums[endIndex]-nums[i])
{
res.add(new LinkedListInteger(Arrays.asList(nums[i],nums[startIndex],nums[endIndex])));
break;
}
if(nums[startIndex]nums[endIndex]-nums[i])
{
endIndex--;
}
if(nums[startIndex]nums[endIndex]-nums[i])
{
startIndex;
}
}
}
return res;
}