Leetcode15 3Sum

Posted chason95

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode15 3Sum相关的知识,希望对你有一定的参考价值。

开始的思路是,暴力解法,寻找每组的两个数O(N^2),然后找是否有第三个数,一共O(N^3)。

沿着这个思路,怎么降低复杂度呢?

开始的思路是,先排序,两个指针分别从两头往中间走,找第三个数,但是比如-3 -2 -1 -1 1 1 2 3,这个就无法判断下一个是应该左指针走还是右指针走,要递归了。

然后看discuss,55ms,66%的方法,是对每个数,找另外两个数,时间复杂度O(n^2)。

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> ans = new ArrayList<>();
        Arrays.sort(nums);
        for(int i=0;i<nums.length-2;i++) {
            if(i==0||(i>0&&nums[i]!=nums[i-1])) {
                int low=i+1,high=nums.length-1;
                while(low<high) {
                    if(nums[low]+nums[high]==-nums[i]) {
                        ans.add(Arrays.asList(nums[i],nums[low],nums[high]));
                        while(low<high&&nums[low]==nums[low+1]) low++;
                        while(low<high&&nums[high]==nums[high-1]) high--;
                        low++;high--;
                    }
                    else if (nums[low]+nums[high]>-nums[i]) {
                        high--;
                    }
                    else {
                        low++;
                    }
                }
            }
        }
        return ans;
    }
}

这题挺好的。这个做法就可以了。

以上是关于Leetcode15 3Sum的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 15 3Sum

[leetcode][15] 3Sum

Leetcode 15. 3Sum(python)

Leetcode 15. 3Sum

leetcode15 3Sum

[leetcode]15. 3Sum[UNSOLVED]