Google算法题:三数求和

来源:互联网 发布:相宜本草淘宝有假货吗 编辑:程序博客网 时间:2024/05/22 15:50


http://www.lintcode.com/zh-cn/problem/3sum/


给出一个有n个整数的数组S,在S中找到三个整数a, b, c,找到所有使得a + b + c = 0的三元组。

 注意事项

在三元组(a, b, c),要求a <= b <= c。

结果不能包含重复的三元组。

样例

如S = {-1 0 1 2 -1 -4}, 你需要返回的三元组集合的是:

(-1, 0, 1)

(-1, -1, 2)


public class Solution {    /*     * @param numbers: Give an array numbers of n integer     * @return: Find all unique triplets in the array which gives the sum of zero.     */    //TC = O(nlgn)+O(n^2)    public List<List<Integer>> threeSum(int[] numbers) {        // write your code here        List<List<Integer>> res = new ArrayList<List<Integer>>();        if(numbers==null) return res;                int n = numbers.length;        //TC = O(nlgn)        Arrays.sort(numbers);                //TC = O(n^2)        for(int ai=0; ai<n; ai++){            if(numbers[ai]>0)                return res;                        if(ai>0){                if(numbers[ai]==numbers[ai-1])                    continue;            }            int a = numbers[ai];                        for(int bi=ai+1, ci=n-1; bi<ci;){                int b = numbers[bi];                int c = numbers[ci];                if(a+b+c==0){                    res.add(new ArrayList<Integer>(){{add(a);add(b);add(c);}});                    while(++bi<--ci && numbers[bi]==b && numbers[ci]==c){}                }else if(a+b+c>0)                    ci--;                else if(a+b+c<0)                    bi++;            }        }        return res;    }};


原创粉丝点击