leetcode(15)三数之和+去重

Posted erdanyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode(15)三数之和+去重相关的知识,希望对你有一定的参考价值。

三数之和

解题思路:排序+双指针

class Solution 
    public List<List<Integer>> threeSum(int[] nums)   
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        if(nums.length<=2)
            return result;
        
        List<Integer> item = null;
        Arrays.sort(nums);
        int len = nums.length;
        int zeroCount = 0;
        Map<Integer,Integer> map = new HashMap<>();
        for(int i=0;i<len;i++)
            if(nums[i]==0)
               zeroCount++;  
            
            map.put(nums[i],i);
        
        if(zeroCount>=3)
            item = new ArrayList<>();
            item.add(0);
            item.add(0);
            item.add(0);
            result.add(item);
        
        int l=0;
        int r=0;
        int temp=0;
        Integer t = 0;
        for(int i=0;i<len-2;i++)
            if(nums[i+1]==nums[i])
                continue;
            
            if(i>0&&nums[i-1]==nums[i])
                temp = nums[i]*2;
                t = map.get(-temp);
                if(t!=null&&t>i)
                   item = new ArrayList<>();
                    item.add(nums[i]);
                    item.add(nums[i]);
                    item.add(-temp);
                    result.add(item); 
                
            
            l=i+1;
            r=len-1;
            while(l<r)
                if(nums[i]<-nums[l]-nums[r])
                    while(l<r&&nums[l+1]==nums[l])
                        l++;
                    
                    l++;
                else if(nums[i]>-nums[l]-nums[r])
                    while(l<r&&nums[r-1]==nums[r])
                        r--;
                    
                    r--;
                else
                    item = new ArrayList<>();
                    item.add(nums[i]);
                    item.add(nums[l]);
                    item.add(nums[r]);
                    result.add(item);
                    while(l<r&&nums[l+1]==nums[l])
                        l++;
                    
                    l++;
                    while(l<r&&nums[r-1]==nums[r])
                        r--;
                    
                    r--;
                
            
        
        return result;
    

 

以上是关于leetcode(15)三数之和+去重的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 15. 三数之和

leetcode 15. 三数之和

LeetCode1两数之和15三数之和

LeetCode1两数之和15三数之和

LeetCode 15 三数之和

算法leetcode|15. 三数之和(rust重拳出击)