给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解题思路:
先把数组排序,
从-1开始到1结束,
每次循环都判断当前位置加上开头结尾是不是为0,分为三种情况
是0的话添加到set中,小于0开头指针加一,大于0,结尾指针减一,一直到开头结尾指针等于当前位置。
最后返回。
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
Set<List<Integer>> res = new HashSet<>();
for (int i = 1; i < nums.length - 1; i++) {
int l = 0, r = nums.length - 1;
while (l < i && r>i) {
if (nums[i] + nums[l] + nums[r] == 0) {
if (i > 1 && nums[i] == nums[i - 1] && nums[i - 1] == nums[i - 2]) break;
List<Integer> temp = new ArrayList<>();
temp.add(nums[l]);
temp.add(nums[i]);
temp.add(nums[r]);
res.add(temp);
l++;
r--;
}
if (nums[i] + nums[l] + nums[r] < 0) {
l++;
}
if (nums[i] + nums[l] + nums[r] > 0) {
r--;
}
}
}
return new ArrayList<>(res);
}
}
复制代码