题目链接:LeeCode15三数之和
题目描述:
双指针问题,先排序,对于每一个数据将指针定在左边和右边,根据返回结果的跟零对比的大小判断将右指针左移(结果变小)还是将左指针右移(结果变大),每次找到答案集的时候将指针向中间靠拢(排除重复结果),找有没有别的解可以满足要求
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> lists=new ArrayList<>();
for (int i = 0; i < nums.length-2; i++) {
int ii=i+1,jj= nums.length-1;
if(i>0&&nums[i]==nums[i-1]){
continue;
}
while (ii<jj){
int sum=nums[i]+nums[ii]+nums[jj];
if(sum==0){
List<Integer> list=new ArrayList<>();
list.add(nums[i]);
list.add(nums[ii]);
list.add(nums[jj]);
lists.add(list);
while(ii<jj&&nums[ii]==nums[ii+1])ii++;
while(ii<jj&&nums[jj]==nums[jj-1])jj--;
ii++;
jj--;
}else if(sum>0){
jj--;
}else if(sum<0){
ii++;
}
}
}
return lists;
}
}