85双指针解三数之和

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

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

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

你可能感兴趣的:(JAVA刷题500道,算法,数据结构,java)