标签:15 nums int 三数 back ret ss end
15. 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = [] 输出:[]
示例 3:
输入:nums = [0] 输出:[]
提示:
0 <= nums.length <= 3000-105 <= nums[i] <= 105
解析:
很水的一题其实,聊着天做wrong几次,无语
专心做题
class Solution {
public:
// int vis[200010];
unordered_map<int, int> mm;
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
// memset(vis, 0, sizeof(vis));
vector<vector<int> > ret;
for(int i = 0; i < nums.size(); i++)
{
mm[nums[i]] = i + 1;
}
for(int i = 0; i < nums.size(); i++)
{
if(i > 0 && nums[i] == nums[i - 1]) continue;
int a = nums[i];
for(int j = i + 1; j < nums.size(); j++)
{
if(j > i + 1 && nums[j] == nums[j - 1]) continue;
int b = nums[j];
int temp = 0 - (a + b);
// string ss = "";
// ss += to_string(a);
// ss += to_string(b);
// ss += to_string(temp);
int k = mm[temp];
if(k && k - 1 > j)
{
vector<int> v;
v.push_back(a);
v.push_back(b);
v.push_back(temp);
ret.push_back(v);
}
}
}
// sort(ret.begin(), ret.end());
// if(ret.size())
// ret.erase(unique(ret.begin(), ret.end()), ret.end());
return ret;
}
};
标签:15,nums,int,三数,back,ret,ss,end 来源: https://www.cnblogs.com/WTSRUVF/p/16544856.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。
