一、题目:
给定一个数组,判断是否存在三元组判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

二、思路
1、对数组进行排序,固定一个数,利用双指针,去找补数。注意:i,j,k都需要去重。
三、代码
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new LinkedList<>();
Arrays.sort(nums);
for(int i = 0; i<nums.length-2;i++){
if(i>0 && nums[i] == nums[i-1]) continue;
int j = i+1, k = nums.length-1;
int target = -nums[i];
while(j<k){
if(nums[j] + nums[k] == target){
res.add(Arrays.asList(nums[i],nums[j],nums[k]));
while(j<k && nums[j] == nums[j+1]) j++;
while(j<k && nums[k] == nums[k-1]) k--;
j++;
k--;
}else if(nums[j] + nums[k] < target){
j++;
}else{
k--;
}
}
}
return res;
}
}
四、语法,记录一下
Arrays.asList(a, b, c)作用是:创建一个包含 a, b, c 的不可变(结构上)List。
1254

被折叠的 条评论
为什么被折叠?



