3Sum
2015-07-18 16:12
218 查看
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>>result;
if(nums.size()<3) return result;
vector<int>ivec;
sort(nums.begin(),nums.end());
int len=nums.size();
int left=0,right=len-1;
int mid=left+1;
for(;left<len-2;left++)
{
while( left > 0 && left< len && nums[left] == nums[left-1])
left++;
mid=left+1;
right=len-1;
while(mid<right)
{
if(right < len - 1 && nums[right] == nums[right+1] )
{
right--;
continue; //循环;
}
if(nums[left]+nums[mid]+nums[right]>0)
right--;
else if(nums[left]+nums[mid]+nums[right]<0)
mid++;
else
{
result.push_back({nums[left],nums[mid],nums[right]});
mid++;
right--;
}
}
}
sort(result.begin(),result.end());
result.erase(unique(result.begin(),result.end()),result.end());
return result;
}
};
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>>result;
if(nums.size()<3) return result;
vector<int>ivec;
sort(nums.begin(),nums.end());
int len=nums.size();
int left=0,right=len-1;
int mid=left+1;
for(;left<len-2;left++)
{
while( left > 0 && left< len && nums[left] == nums[left-1])
left++;
mid=left+1;
right=len-1;
while(mid<right)
{
if(right < len - 1 && nums[right] == nums[right+1] )
{
right--;
continue; //循环;
}
if(nums[left]+nums[mid]+nums[right]>0)
right--;
else if(nums[left]+nums[mid]+nums[right]<0)
mid++;
else
{
result.push_back({nums[left],nums[mid],nums[right]});
mid++;
right--;
}
}
}
sort(result.begin(),result.end());
result.erase(unique(result.begin(),result.end()),result.end());
return result;
}
};
相关文章推荐
- PRank3
- java 泛型简单使用代码
- 树的3种表示法
- 矩阵及其变换、特征值与特征向量的物理意义
- 黑马程序员——Java基础---面向对象
- The Triangle(简单DP)
- GET和POST有什么区别?只求不再被坑!
- C语言程序设计9
- 华为s5700交换机vlan设置
- delphi 程序嵌入桌面效果的实现
- delphi 程序嵌入桌面效果的实现
- 《学习OpenCV》第四章课后题1-b&c
- Android中Application类用法(整个程序的全局变量,即单例),类似于session
- android虚拟机的默认宿主IP地址
- RHCE7进阶第一天安装排错
- Sublime Text主题皮肤安装与切换使用方法
- sizeWithFont方法_自定义cell高度
- 检测新版本
- 推荐系统评测指标—准确率(Precision)、召回率(Recall)、F值(F-Measure)
- poj 3088 组合计数,第二类斯特林数