// LeetCode 15 3sum
// 开始理解错题意,以为三元组数组不能相同,导致不必要的浪费时间
// 之后反应过来,之前看过解法,觉得挺简单,真正上手的时候发现太多
// 细节,例如如果有重复是因为从重复的数字又遍历了一遍,比如样例的
// -1,-1,太久没敲代码,生疏太多,哎...加油吧
class Solution {
public List<List<Integer> > threeSum(int[] nums){
List<List<Integer>> lists = new ArrayList<>();
if (nums.length < 3) return new ArrayList<>();
Arrays.sort(nums);
for(int i = 0; i < nums.length; i++){
if (i != 0 && nums[i] == nums[i - 1]) continue;
int l = i + 1;
int r = nums.length - 1;
while(l < r){
int ans = nums[i] + nums[l] + nums[r];
if (ans == 0){
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[l]);
list.add(nums[r]);
lists.add(list);
l++;
r--;
while(l < r && nums[l] == nums[l - 1] ) l++;
while(l < r && nums[r] == nums[r + 1]) r--;
}else if (ans > 0){
r--;
} else {
l++;
}
}
}
return lists;
}
}