LeetCode 15. 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.
     */
    public ArrayList> threeSum(int[] nums) {
        //先将数组排序,由小到大,然后依次从第一个元素开始,两根指针,一头一尾遍历,如果找到等于target也就是0的就add进结果。
        
        //判断边界情况,当nums为空或者null的时候
        if(nums == null || nums.length == 0) {
            return null;
        }
        
        ArrayList> res = new ArrayList<>();
        //首先对数组进行排序
        Arrays.sort(nums);
        
        //从第一个元素开始循环
        for(int i=0;i 0)
                    right--;
                else if(sum < 0)
                    left++;
                else{
                    ArrayList temp = new ArrayList<>();
                    temp.add(nums[i]);
                    temp.add(nums[left]);
                    temp.add(nums[right]);
                    res.add(temp);
                    left++;
                    right--;
                    //同样可以优化,如果有相等的元素判断一次就可以
                    while(left

你可能感兴趣的:(LeetCode 15. 3Sum)