3Sum

    xiaoxiao2021-03-25  142

    先将数组进行排列,从i=0开始循环,每个遇见相等的数向前进一位,同时设立两个观察哨兵(left、right),当每一次有a+b+c=0时候添加一个list,同时,也是left和right遇见相等的数分别向前和向后进一位。具体代码如下:

    public static List<List<Integer>> threeSum(int[] nums) { List<List<Integer>>set=new ArrayList<List<Integer>>(); if (nums==null||nums.length<3) return null; Arrays.sort(nums); for (int i = 0; i < nums.length-2; i++) { if (i==0||nums[i]>nums[i-1]) { int left=i+1; int right=nums.length-1; while (left<right) { if (nums[i]+nums[left]+nums[right]==0) { List<Integer>list=new ArrayList<>(); list.add(nums[i]); list.add(nums[left]); list.add(nums[right]); set.add(list); left++; right--; while(left<right&&nums[left]==nums[left-1]) left++; while(left<right&&nums[right]==nums[right+1]) right--; }else if (nums[i]+nums[left]+nums[right]<0) left++; else right--; } } } return set; }
    转载请注明原文地址: https://ju.6miu.com/read-7153.html

    最新回复(0)