码迷,mamicode.com
首页 > 其他好文 > 详细

15. 三数之和

时间:2020-06-28 20:25:10      阅读:36      评论:0      收藏:0      [点我收藏+]

标签: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],在双指针求和

15. 三数之和

标签:continue   ++   problems   list   官方   turn   集合   bsp   商业   

原文地址:https://www.cnblogs.com/boboboo610/p/13204650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!