3 Sum 解法

 
 

这样 2SumWithThird的 时间复杂度为O(n),整个算法的时间复杂度为O(n^2) 不知道为什么OJ 过不了。。同样在2SumWithThird的设计里解决了 重复元素的问题。,


public List<List<Integer>> threeSum(int[] nums) {
            
            List<List<Integer>> rlt = new ArrayList<List<Integer>>();
            
            if(nums.length < 3){
                return rlt;
            }
            
            for(int i = 0; i < nums.length; i ++){
                
                List<List<Integer>> twoSumWithThird = twoSumWithThird(nums, i, -nums[i],  rlt);
                
            }
            
            return rlt;
        }
        
        List<List<Integer>> twoSumWithThird(int[] nums, int sIndex, int sum, List<List<Integer>> rlt){
            HashSet<Integer> set = new HashSet<Integer>();
            for(int i = sIndex + 1; i < nums.length; i ++){
                if(set.contains(sum - nums[i])){
                    ArrayList<Integer> elem = new ArrayList<Integer>();
                    elem.add(nums[i]);
                    elem.add(sum - nums[i]);
                    elem.add(nums[sIndex]);
                    Collections.sort(elem);
                    if(!rlt.contains(elem)){
                        rlt.add(elem);
                    }
                    
                } else {
                    set.add(nums[i]);
                }
            }
                return rlt;

}



你可能感兴趣的:(3 Sum 解法)