标签:continue ++ problems list 官方 turn 集合 bsp 商业
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
法一:
1 public List<List<Integer>> threeSum(int[] nums) { 2 if (nums == null || nums.length < 3) 3 return new ArrayList<>(); 4 List<List<Integer>> ans = new ArrayList<>(); 5 Arrays.sort(nums); 6 int len = nums.length; 7 8 for (int i = 0; i < len - 2; i++) { 9 //最小的都大于零,直接返回空数组 10 if (nums[i] > 0) 11 return ans; 12 if(i > 0 && nums[i] == nums[i-1])//nums[i]去重 13 continue; 14 //以nums[i]为基准,nums[l]和nums[r],向中心遍历靠拢求和 15 int l = i + 1, r = len - 1; 16 while (l<r){ 17 int sum = nums[i] + nums[l] + nums[r]; 18 if(sum == 0){ 19 ans.add(Arrays.asList(nums[i],nums[l],nums[r])); 20 while (l<r && nums[r] == nums[r-1])//nums[r]去重 21 r--; 22 while (l<r && nums[l] == nums[l+1])//nums[l]去重 23 l++; 24 25 l++; 26 r--; 27 } 28 if(sum <0 ) 29 l++; 30 if(sum>0) 31 r--; 32 } 33 } 34 return ans; 35 36 }
确定基准数a[i],在双指针求和
标签:continue ++ problems list 官方 turn 集合 bsp 商业
原文地址:https://www.cnblogs.com/boboboo610/p/13204650.html