15. 三数之和
Posted yuhong1103
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了15. 三数之和相关的知识,希望对你有一定的参考价值。
1 // 312/313 始终会出现一种情况——>全0 2 3 // 后来引进了双指针算法 4 class Solution 5 { 6 public: 7 vector<vector<int>> threeSum(vector<int>& nums) 8 { 9 vector<vector<int>> res; 10 int n = nums.size(); 11 sort(nums.begin(),nums.end()); 12 for(int i = 0;i < n;i ++) 13 { 14 //列举的第一个元素不能与前面元素重合——>去重 15 if(i > 0 && nums[i] == nums[i-1]) continue; 16 17 //第一个元素也不能为正数——>剪枝 18 if(nums[i] > 0) break; 19 20 int l = i + 1; 21 int r = n - 1; 22 int target = -nums[i]; 23 while(l < r) 24 { 25 if(nums[l] + nums[r] > target) r--; 26 else if(nums[l] + nums[r] < target) l++; 27 else 28 { 29 res.push_back({nums[i],nums[l++],nums[r--]}); 30 } 31 } 32 } 33 sort(res.begin(),res.end()); 34 auto it = unique(res.begin(),res.end()); 35 res.erase(it,res.end()); 36 return res; 37 } 38 };
以上是关于15. 三数之和的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第7天 | ● 454.四数相加II ● 383. 赎金信 ● 15. 三数之和 ● 18. 四数之和 ● 总结