15. 三数之和 (思维)

Posted letlifestop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15. 三数之和 (思维)相关的知识,希望对你有一定的参考价值。

题目连接:

https://leetcode-cn.com/problems/3sum/

题目大意:

中文题目

具体思路:

使得 a +b +c = 0,这个等式成立有如下情况

1. 都为0

2. 一正两负/两正一负

3. 一正一负一零

观察之后,除了0这种情况,都会存在一个负数,我们可以第一步枚举负数,枚举完之后,再从剩下的数中凑得等式成立

我们将所有的数进行排序之后,第一部分枚举负数,第二部分通过两个指针来凑数

关于去重,如果负数都相同,这个好判断。

需要考虑的是剩下的两个数的去重,我们可以通过一个临时变量,保存b的值,如果a,b都相同,那么c一定相同,通过这个来实现去重功能

AC代码:

 1 class Solution 
 2 public:
 3     vector<vector<int>> threeSum(vector<int>& nums) 
 4         vector<vector<int>>ans;
 5         vector<int>tmp;
 6         int len = nums.size();
 7         if(len<3) 
 8             return ans;
 9         int i, tmp_sum = 0x3f3f3f3f, di;
10         
11         sort(nums.begin(), nums.end());
12         for(i = 0; i < len - 2; i++)
13             if(nums[i] > 0)break;
14             if(nums[i] == -tmp_sum)continue;
15             tmp.push_back(nums[i]);
16             tmp_sum = -nums[i];
17             int l = i + 1, r = len - 1;
18             di = nums[l] - 1;
19             while(l < r)
20                 if(nums[i] + nums[l] + nums[r] == 0)
21                     if(nums[l] != di)
22                     tmp.push_back(nums[l]);
23                     tmp.push_back(nums[r]);
24                     ans.push_back(tmp);
25                     tmp.pop_back();
26                     tmp.pop_back();
27                     di = nums[l];
28                     
29                     l++;
30                     r--;
31                 
32                 else if(nums[l] + nums[r] > -nums[i])
33                     r--;
34                 
35                 else if(nums[l] + nums[r] < -nums[i])
36                     l++;
37                 
38             
39             tmp.pop_back();
40         
41       return ans;   
42     
43 ;

 

以上是关于15. 三数之和 (思维)的主要内容,如果未能解决你的问题,请参考以下文章

思维导图整理大厂面试高频数组补充1: 最接近的三数之和 和 三数之和 的两个不同之处, 力扣16

思维导图整理大厂面试高频数组补充1: 最接近的三数之和 和 三数之和 的两个不同之处, 力扣16

❤️导图整理数组4: 三数之和 相比于 两数之和 的难点, 力扣15❤️

bzoj3251: 树上三角形(思维题)

❤️导图整理数组5: 四数之和 相比 三数之和 的大量优化, 力扣18详细注解❤️

15. 三数之和