018_四数之和

Posted zzw1024

tags:

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

 1 //使用三数之和中的双指针的思想,固定外围两个数
 2 vector<vector<int>> fourSum(vector<int>& nums, int target) {
 3     sort(nums.begin(), nums.end());
 4     vector<vector<int>>Res;
 5     if (nums.size() < 4)return Res;
 6     for (int d = nums.size() - 1; d >= 3;) {
 7         for (int a = 0; a < d;) {
 8             for (int b = a + 1, c = d - 1; b < c;) {
 9                 if ((nums[a] + nums[b] + nums[c] + nums[d]) < target)//小了,要大点
10                     ++b;
11                 else if ((nums[a] + nums[b] + nums[c] + nums[d]) > target)//太大了,要小点
12                     --c;
13                 else {//刚好为0
14                     vector<int>v = { nums[a],nums[b] ,nums[c], nums[d] };
15                     Res.push_back(v);
16 
17                     do
18                     {
19                         ++b;
20                     } while (b < c && nums[b] == nums[b - 1]);//去除重复数字
21 
22                     do
23                     {
24                         --c;
25                     } while (c > b && nums[c] == nums[c + 1]);//去除重复数字
26 
27                 }
28             }
29             do
30             {
31                 ++a;
32             } while (a < d && nums[a] == nums[a - 1]);//去除重复数字
33         }
34 
35         do
36         {
37             --d;
38         } while (d >= 3 && nums[d] == nums[d + 1]);//去除重复数字
39     }
40 
41     return Res;
42 
43 }

 

以上是关于018_四数之和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-018-四数之和

LeetCode-018-四数之和

代码随想录算法训练营第7天 | ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结

代码随想录算法训练营第七天 | 454.四数相加II ,383. 赎金信 ,15. 三数之和,18. 四数之和

LeetCode 18. 四数之和

数组练习题:两数之和三数之和四数之和