Leecode15

    科技2022-08-31  101

    先进行排序 i进行遍历数组,l= i + 1,r = i - 1 while(l < r) nums[i] + nums[l] + nums[r] < 0是nums[l]小了 nums[i] + nums[l] + nums[r] > 0是nums[r]大了

    import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Solution { //去重是关键 public List<List<Integer>> threeSum(int[] nums) { List<List<Integer>> ans = new ArrayList<>(); //特判 if(nums.length < 3){ return ans; } Arrays.sort(nums); int l = 0; int r = 0; int len = nums.length; for (int i = 0; i < len; i++) { if(i > 0 && nums[i] == nums[i - 1]) continue; l = i + 1; r = len - 1; while(l < r){ //去重 if(nums[i] + nums[l] + nums[r] == 0){ ArrayList<Integer> subList = new ArrayList<>(); subList.add(nums[i]); subList.add(nums[l]); subList.add(nums[r]); ans.add(subList); l++; r--; //去重 while(l > 0 && l < len && nums[l] == nums[l - 1]) l++; while(r < len - 1 && r > 0 &&nums[r] == nums[r + 1]) r--; //还要继续下去 continue; }else if(nums[i] + nums[l] + nums[r] < 0){ l++; }else if(nums[i] + nums[l] + nums[r] > 0){ r--; } } } return ans; } public static void main(String[] args) { int[] arr = {0,0,0}; Solution solution = new Solution(); List<List<Integer>> lists = solution.threeSum(arr); for (List<Integer> list : lists) { System.out.println(list); } } }
    Processed: 0.008, SQL: 9