三数之和
15 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> list=new ArrayList<>();
Arrays.sort(nums);
for(int i=0;i<nums.length;i++)
{
if(i > 0 && nums[i] == nums[i-1]) continue; // 去重
int c=nums[i]; //a+b=-c,这是那个c
int m=i+1; //双指针左边的下标,开始指向要判断的下一位
int n=nums.length-1;//双指针右边的下标,开始指向最后一位
while(m<n)
{
if(nums[m]+nums[n]==-c)
{
list.add(Arrays.asList(nums[i],nums[m],nums[n]));
while(m<n&&nums[m]==nums[m+1]) //去重,如果下一个是相同,代表已经有两个元素相同了,所以如果为0,那么第三个元素一定是为0的,那么就肯定重复了,比如说[-2,0,0,2,2]就会出现两个[-2,0,2]这种情况,所以如果有相等的元素,肯定就不会再要了
m++;
while(m<n&&nums[n]==nums[n-1]) //去重
n--;
m++;
n--;
}
else if(nums[m]+nums[n]<-c)
{
m++;
}
else
{
n--;
}
}
}
return list;
}
}