class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> LList = new ArrayList<>();
Arrays.sort(nums); //先排序,sort后为升序
int len;
len = nums.length;
if(len < 3){ // 长度不够,直接返回
return LList;
}
for(int i = 0;i < len-2;i++){
if(i > 0 && nums[i] == nums[i-1]){ //避免重复,去重
continue;
}
int L=i+1;//双指针的定义
int R=len-1;
while(L<R){
int sum = nums[i] + nums[R] + nums[L];
if(sum == 0){
LList.add(Arrays.asList(nums[i],nums[L],nums[R])); //list 方法,添加到答案数组里
while(L<R && nums[L] == nums[L+1]){ //去重
L++;
}
while(L<R && nums[R] == nums[R-1]){ //去重
R--;
}
L++; //这里不能忘记,改了半个小时bug发现这里漏了,符合条件后要继续
R--;
}
else if(sum < 0){ //指针的移动
L++;
}else if(sum > 0){
R--; //指针的移动
}
}
}
return LList;
}
}
代码的时间复杂度是O(n2)