三数之和
给定一个包含 n 个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
具体思路:控制一个作为遍历的输,去计算另外两个数。从最左边的数开始遍历,比较i+1到nums.length-1的数。遇到重复的数则通过比较过滤掉。
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> result = new LinkedList<>();
if(nums!=null && nums.length>2){
for(int i=0;i<nums.length-2;){
int j = i+1;
int k = nums.length - 1;
while(j<k){
if(nums[j] + nums[k] == -nums[i]){
List<Integer> list = new LinkedList<>();
list.add(nums[i]);
list.add(nums[j]);
list.add(nums[k]);
result.add(list);
j++;
k--;
while(j<k&&nums[j]==nums[j-1]){
j++;
}
while(j<k&&nums[k]==nums[k+1]){
k--;
}
}else if(nums[j] + nums[k] > -nums[i]){
k--;
while(j<k&&nums[k]==nums[k+1]){
k--;
}
}else{
j++;
while(j<k&&nums[j]==nums[j-1]){
j++;
}
}
}
i++;
while(i<nums.length-2&&nums[i]==nums[i-1]){
i++;
}
}
}
return result;
}
}