思路,先选一个数,后面再找两个数num[j],num[k]
如果num[j]+num[k]=0-num[i],j++,k--;
num[j]+num[k]>0-num[i],k--;
num[j]+num[k]<0-num[i],j++;
O(n^2),注意相等的情况。
public class Solution {
public ArrayList<ArrayList<Integer>> threeSum(int[] num) {int n=num.length;
Arrays.sort(num);
ArrayList<ArrayList<Integer>> rst=new ArrayList<ArrayList<Integer>>();
if(n==0)
return rst;
int[] tsnum=new int[n];
int i,j,k;
for(i=0;i<n;i++)
tsnum[i]=0-num[i];
int towsum;
ArrayList<Integer> triple=null;
for(i=0;i<n-2;i++)
{
if(i>0 && tsnum[i]==tsnum[i-1])
continue;
j=i+1;k=n-1;
while(k>j)
{
if(j>i+1 && num[j]==num[j-1])
{ j++;continue;}
if(k<n-1 && num[k]==num[k+1])
{ k--;continue;}
towsum=num[j]+num[k];
if(towsum==tsnum[i])
{
triple=new ArrayList<Integer>();
triple.add(num[i]);triple.add(num[j]);triple.add(num[k]);
rst.add(triple);
k--;j++;
}
else if(towsum<tsnum[i])
{
j++;
}
else
{
k--;
}
}
}
return rst;
}
}
本文介绍了一种寻找整数数组中三个数之和为零的方法,通过排序数组并使用双指针技术优化查找过程,提高了算法效率。
2870

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



