15,3Sum

来源:互联网 发布:windows 自带工具 u盘 编辑:程序博客网 时间:2024/05/17 08:00

Given an array S of n integers, are there elements abc in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.//给一个整形数组,找出三个数a、b、c,找出不重复的集合,满足加起来为0,注意a<=b<=c;

题目分析:

该题解法为,先对数组进行排序,然后以一个为基准,对后面的元素进行双指针查找,示例

[-1,0,1,2,-1,-4]

第一轮:以第一位为准,后面的元素,使用双指针,使之满足一定条件


代码如下:

public class Solution {    public List<List<Integer>> threeSum(int[] num) {        //1,判断输入出错的状况    if(num==null||num.length<3)    return new ArrayList<List<Integer>>();        //2,排序    Arrays.sort(num);        //3,处理    List<List<Integer>> result_list=new ArrayList<List<Integer>>();        for(int i=0;i<num.length-2;++i)    {    int index1=i+1,index2=num.length-1;    int twoSum=-num[i];    while(index1<index2)    {    if(num[index1]+num[index2]<twoSum)    index1++;    else if (num[index1]+num[index2]>twoSum)    index2--;    else {List<Integer> list=new ArrayList<Integer>();list.add(num[i]);list.add(num[index1]);list.add(num[index2]);result_list.add(list);while(index1<index2&&num[index1]==num[index1+1])index1++;while(index1<index2&&num[index2]==num[index2-1])index2--;index1++;index2--;}    }    //注意0000这种状况    while(i<num.length-2&&num[i+1]==num[i])        i++;        }        return result_list;        }}

0 0
原创粉丝点击