博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] 3Sum
阅读量:4649 次
发布时间:2019-06-09

本文共 2690 字,大约阅读时间需要 8 分钟。

Given an array nums of n integers, are there elements abc in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:

The solution set must not contain duplicate triplets.

Example:

Given array nums = [-1, 0, 1, 2, -1, -4],A solution set is:[  [-1, 0, 1],  [-1, -1, 2]]

三个数字和为0,要求不重复。

首先想到用2Sum的方法,先确定一个数,然后内部循环使用2Sum的哈希算法。最后对结果去重。

结果超时了。贴上代码

class Solution {public:    vector
> threeSum(vector
& nums) { vector
> res; if (nums.empty()) return res; sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size(); ++i) { int target = 0-nums[i]; unordered_set
set; vector
tmp; tmp.push_back(nums[i]); for (int j = i+1; j < nums.size(); ++j) { if (set.count(target-nums[j]) > 0) { tmp.push_back(target-nums[j]); tmp.push_back(nums[j]); } if (tmp.size() == 3) { res.push_back(tmp); tmp.clear(); tmp.push_back(nums[i]); //set.clear(); } set.insert(nums[j]); } } for (auto i = res.begin(); i != res.end(); ++i) { vector
vec1 = *i; sort(vec1.begin(), vec1.end()); for (auto j = i+1; j != res.end(); ++j) { vector
vec2 = *j; sort(vec2.begin(), vec2.end()); if (vec1 == vec2) { j = res.erase(j); j--; } } } return res; }};
View Code

看了看大佬们的答案,豁然开朗

将数组排序,然后确定一个数,再使用二分查找的方法。

class Solution {public:    vector
> threeSum(vector
& nums) { vector
> res; if (nums.empty()) return res; sort(nums.begin(), nums.end()); for (int k = 0; k < nums.size(); ++k) { if (nums[k] > 0) break; if (k > 0 && nums[k] == nums[k-1]) continue; int target = 0 - nums[k]; int i = k + 1, j = nums.size() - 1; while (i < j) { if (nums[i] + nums[j] == target) { res.push_back({nums[k], nums[i], nums[j]}); while (i < j && nums[i] == nums[i+1]) ++i; while (i < j && nums[j-1] == nums[j]) --j; ++i; --j; } else if (nums[i] + nums[j] < target) ++i; else --j; } } return res; }};

 

转载于:https://www.cnblogs.com/immjc/p/9432921.html

你可能感兴趣的文章
win7、offcie 2010是否激活查看方法
查看>>
Linux下使用wget下载FTP服务器文件
查看>>
Java基础 【Arrays 类的使用】
查看>>
MPI 环境搭建问题-运行程序闪退
查看>>
(数据科学学习手札05)Python与R数据读入存出方式的总结与比较
查看>>
面向对象课程 - 寒假第三次作业 - C++计算器项目初始部分
查看>>
Java私塾的一些基础练习题(一)
查看>>
Shell 07 项目案例
查看>>
Dapper基础用法
查看>>
一步步学习SPD2010--第九章节--使用可重用工作流和工作流表单(1)--创建和使用可重用工作流...
查看>>
Network 第六篇 - 三层交换机配置路由功能
查看>>
OSL LLVM 3.3 Related Changes
查看>>
1.4 99乘法表
查看>>
雇佣K个工人的最小费用 Minimum Cost to Hire K Workers
查看>>
mysql优化方法
查看>>
[转]【HttpServlet】HttpServletResponse接口 案例:完成文件下载
查看>>
Eclipse配置默认的编码集为utf-8
查看>>
初学Python
查看>>
rman 脚本备份全过程
查看>>
图像处理笔记(十八):模板匹配
查看>>