Given an array nums
of n integers, are there elements a, b, c in nums
such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
The solution set must not contain duplicate triplets.
class Solution {
public List<List<Integer>> threeSum(int[] num) {
Arrays.sort(num);
List<List<Integer>> lists = new ArrayList<>();
for (int i = 0; i < num.length - 2; i++) {
int lo = i + 1;
int lh = num.length - 1;
if (i == 0 || (i > 0 && num[i] != num[i - 1])) {
while (lo < lh) {
if (num[i] + num[lo] + num[lh] == 0) {
lists.add(Arrays.asList(num[i], num[lo], num[lh]));
while (lo < lh && num[lo] == num[lo + 1]) lo++;
while (lo < lh && num[lh] == num[lh - 1]) lh--;
lo++;
lh--;
} else {
if (num[lo] + num[lh] < -num[i]) {
lo++;
} else {
lh--;
}
}
}
}
}
return lists;
}
}