每日进步之leetcode15题C++实现代码
2016-07-28 22:35
876 查看
15题实现思路在于 先将3个数 转换为2个数求第三个数的问题,注意去重
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ver;
sort(nums.begin(), nums.end());
int len = nums.size();
for( int i = 0; i < len-2; ++i)
{
if(i > 0 && nums[i] == nums[i-1])
{
continue;
}
int begin = i + 1;
int end = len -1;
while(begin < end)
{
if(nums[i] + nums[begin] + nums[end] == 0)
{
vector<int> tmp;
tmp.push_back(nums[i]);
tmp.push_back(nums[begin]);
tmp.push_back(nums[end]);
ver.push_back(tmp);
do
{
++begin;
}while(nums[begin-1] == nums[begin]);
do
{
--end;
}while(nums[end] == nums[end + 1]);
}else if ( nums[begin] + nums[end] + nums[i] > 0)
{
--end;
}else{
++begin;
}
}
}
return ver;
}
};
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ver;
sort(nums.begin(), nums.end());
int len = nums.size();
for( int i = 0; i < len-2; ++i)
{
if(i > 0 && nums[i] == nums[i-1])
{
continue;
}
int begin = i + 1;
int end = len -1;
while(begin < end)
{
if(nums[i] + nums[begin] + nums[end] == 0)
{
vector<int> tmp;
tmp.push_back(nums[i]);
tmp.push_back(nums[begin]);
tmp.push_back(nums[end]);
ver.push_back(tmp);
do
{
++begin;
}while(nums[begin-1] == nums[begin]);
do
{
--end;
}while(nums[end] == nums[end + 1]);
}else if ( nums[begin] + nums[end] + nums[i] > 0)
{
--end;
}else{
++begin;
}
}
}
return ver;
}
};
相关文章推荐
- 苹果和虫子2
- C语言中的数据类型
- 有趣的C语言--函数声明和形参问题
- Leetcode 40. Combination Sum II (Medium) (cpp)
- 线程特定数据
- 有趣的C语言--文件结尾和重定向
- Leetcode 39. Combination Sum (Medium) (cpp)
- 一起talk C栗子吧(第一百七十九回:C语言实例--字符和字符串输出函数二)
- 顺序统计量
- C++外部文件读取相关操作
- 大数阶乘
- C++11系列-改进的类型推导:auto、decltype和新的函数语法
- ffmepg音频重采样
- 排序算法
- Binary Tree Maximum Path Sum
- 【C++11】30分钟了解C++11新特性
- 使用C++委托实现全方向的摇杆
- 一个好的讲解
- 生成全排列的省事方法
- C++ STL 之 lower_bound and upper_bound