给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> ls =new ArrayList<>();
for (int i = 0; i < nums.length-2; i++) {
if (i == 0 || (i > 0 && nums[i] != nums[i - 1])) {
int j = i+1;
int k = nums.length-1;
while(j < k) {
if (nums[j]+nums[k]+nums[i] < 0) {
while(j < k && nums[j] == nums[j+1]) {
j++;
}
j++;
}
else if (nums[j]+nums[k]+nums[i] == 0) {
ls.add(Arrays.asList(nums[i],nums[j],nums[k]));
while(j < k && nums[j] == nums[j+1]) {
j++;
}
j++;
while(k > j && nums[k] == nums[k-1]) {
k--;
}
k--;
}
else {
while(k > j && nums[k] == nums[k-1]) {
k--;
}
k--;
}
}
}
}
return ls;
}
}
注意点:1 忽略重复三元组
2 不可以直接删除数组元素,否则会漏解
3 循环结束后还要执行一次j++,k--,否则会超时
来源:https://blog.csdn.net/weixin_40161962/article/details/100834275