LeetCode15:给定一个包含n个整数的数组 nums,判断 nums 中是否存在三个元素a,b,c ,使得 a + b + c =0 ?找出所有满足条件且不重复的三元组。
public List<List<Integer>> threeSum(int[] nums) {
if (nums == null || nums.length < 3) {
return Collections.emptyList();
}
Arrays.sort(nums);
List<List<Integer>> ret = new ArrayList<>();
for (int i = 0; i < nums.length - 2; i++) {
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int x = nums[i];
int p = i + 1, q = nums.length - 1;
while (p < q) {
if (nums[p] + nums[q] + x == 0) {
ret.add(Stream.of(x, nums[p], nums[q]).collect(Collectors.toList()));
while (++p < q && nums[p] == nums[p - 1]);
while (--q > p && nums[q] == nums[q + 1]);
} else if (nums[p] + nums[q] + x > 0) {
while (--q > p && nums[q] == nums[q + 1]);
} else {
while (++p < q && nums[p] == nums[p - 1]);
}
}
}
return ret;
}
这段代码包含了数组和循环的技巧,值得反复玩味。