85双指针解三数之和

发布时间:2024年01月01日

问题描述:给你一个包含n个整数的数组nums,判断nums中是否勋在三个元素a,b,c使得a+b+c=0,请你找出所有和为0且不重复的三元组。

求解思路:如果使用for循环的方式,n3的时间复杂度,可以采用双指针的方式,先将整个数组进行排序,然后通过for循环遍历这个排序后的数组,index,然后将其固定,在后面定义两个start(当前index+1)和end(末尾)进行遍历,直到两者之和等于-nums[index],并保存我们的三元组,该方法使得遍历过程不重复。

public List<List<Integer>>threeSum(int []nums)
{
Arrays.sort(nums);
List<List<Integer>>res=new?List<List<Integer>>();
for(int i=0;i<nums.length-2;i++)
{
int startIndex=i+1;
int endIndex=nums.length-1;
while(endindex>startIndex)
{
if(nums[startIndex]+nums[endIndex]==-nums[i])
{
res.add(new LinkedList<Integer>(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;
}

文章来源:https://blog.csdn.net/qq_52299902/article/details/135326497
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。