15. 3Sum 2019-03-15

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

1.解法为

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

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

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


class Solution {

    public List<List<Integer>> threeSum(int[] nums) {

      Arrays.sort(nums);

        List<List<Integer>> all=new ArrayList<List<Integer>>();

        for(int i=0;i<nums.length-1;i++){

        if(nums[i]>0) {

        break;

        }

            int start=i+1;

            int end=nums.length-1;

            int num=0-nums[i];

            while(start<end) {

            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<end&&nums[start]==nums[start+1]) {

                  start++;

                  }

                  while(start<end&&nums[end]==nums[end-1]) {

                  end--;

                  } 

                  start++; end--;

            }else if(nums[start]+nums[end]<num) {

            start++;

            }else {

            end--;

            }

            }

        }


        return all;

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容