题目描述:
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0
?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示例 2:
输入:nums = [] 输出:[] 示例 3:
输入:nums = [0] 输出:[]
尝试解法一:暴力for——超时。。。。。。
尝试解法二:HashMap——去重失败,超时。。。。。
正确解法:双指针法
注意去重
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
int n=nums.length-1;
Arrays.sort(nums);
List<List<Integer>> ans=new ArrayList<>();
for(int i=0;i<=n;i++)
{
if(nums[i]>0)
{
return ans;
}
if(i>0&&nums[i]==nums[i-1])
{
continue;
}
int l=i+1;
int r=n;
while(l<r)
{
int sum=nums[i]+nums[l]+nums[r];
if(sum<0)
{
l++;
}else if(sum>0)
{
r--;
}else
{
ans.add(Arrays.asList(nums[i],nums[l],nums[r]));
while(r>l&&nums[r]==nums[r-1])
{
r--;
}
while(r>l&&nums[l]==nums[l+1])
{
l++;
}
l++;
r--;
}
}
}
return ans;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)