15. 3Sum 2019-03-15

题目为给定一个整型数组,输出该数组中3个数之和为0的集合

1.解法为

    先对该数组进行排序,然后固定第一个数不变,找出该数后和为(0-第一个数)的两个数,找出两数之和的方法与找出最大容量的那一题类似,从首尾开始迭代。

主要的思想为将找出三个数的和转化为找出两个数的和,简化了一下。

时间复杂度为O(n^2);


class Solution {

    public List> threeSum(int[] nums) {

      Arrays.sort(nums);

        List> all=new ArrayList>();

        for(int i=0;i

        if(nums[i]>0) {

        break;

        }

            int start=i+1;

            int end=nums.length-1;

            int num=0-nums[i];

            while(start

            if(nums[start]+nums[end]==num) {                       

                  if(!all.contains(Arrays.asList(nums[i], nums[start], nums[end]))) {

                      all.add(Arrays.asList(nums[i], nums[start], nums[end]));

                  }

                  while(start

                  start++;

                  }

                  while(start

                  end--;

                  } 

                  start++; end--;

            }else if(nums[start]+nums[end]

            start++;

            }else {

            end--;

            }

            }

        }


        return all;

    }

}

你可能感兴趣的:(15. 3Sum 2019-03-15)