码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode15 3Sum

时间:2018-11-26 00:19:40      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:个数   lis   ||   new   方法   style   discus   --   好的   

开始的思路是,暴力解法,寻找每组的两个数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

标签:个数   lis   ||   new   方法   style   discus   --   好的   

原文地址:https://www.cnblogs.com/chason95/p/10017604.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!