Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4], A solution set is: [ [-1, 0, 1], [-1, -1, 2] ]
思路,先排序,再二分,要注意要跳过相同的数
public List<List<Integer>> ans;
public List<List<Integer>> threeSum(int[] nums) {
ans=new ArrayList<List<Integer>>();
Arrays.sort(nums);
for(int i=0;i<nums.length;i++){
if(i>0&&nums[i]==nums[i-1]){
continue; //这里要先判断i>0,因为Java会在编译时候检查数组是否越界.不能出现重复元素
}
biFind(nums,nums[i],i+1,nums.length-1);
}
return ans;
}
public void biFind(int[] nums,int key,int s,int e){
while(s<e){
if(key+nums[s]+nums[e]==0){
List<Integer> bAns=new ArrayList<Integer>();
bAns.add(key);
bAns.add(nums[s]);
bAns.add(nums[e]);
ans.add(bAns);
while(s<e&&nums[s]==nums[s+1]) s++; //
while(s<e&&nums[e]==nums[e-1]) e--; //
s++;
e--;
}
else if(key+nums[s]+nums[e]<0)
{
s++;
}
else{
e--;
}
}
}
本文介绍了一种解决三数之和为零问题的方法,首先对数组进行排序,然后使用双指针技术查找所有不重复的三元组,使得它们的和为零。文章详细解释了算法步骤,并提供了具体的实现代码。

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



