leeetcode15. 3Sum
来源:互联网 发布:刚出土的兵马俑知乎 编辑:程序博客网 时间:2024/06/07 04:42
leetcode15. 3Sum
思路:
1.利用2sum的方法直接套上,这里就不讨论;
2.使用正负0三个map,分情况讨论。
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { map<int,vector<int>*> positive; map<int,vector<int>*> zero; map<int,vector<int>*> negative; vector<vector<int>> result; vector<int> intVector; int tempArr[3]; //初始化正负0三个数组,采用map是降低查找时间 for(vector<int>::iterator iter = nums.begin();iter!=nums.end();iter++){ if(*iter>0){ if(!positive.count(*iter)) { positive[*iter] = new vector<int>(); } positive[*iter]->push_back(iter - nums.begin()); }else if(*iter<0 && (*iter)>INT_MIN){ if(!negative.count(*iter)) { negative[*iter] = new vector<int>(); } negative[*iter]->push_back(iter - nums.begin()); }else{ if(!zero.count(*iter)) { zero[*iter] = new vector<int>(); } zero[*iter]->push_back(iter - nums.begin()); } } intVector.push_back(0); intVector.push_back(0); intVector.push_back(0); if(zero.count(0) && zero[0]->size()>=3) result.push_back(intVector); intVector.clear(); if(positive.size()>=1 && negative.size()>=1){ for(map<int,vector<int>*>::iterator iterNegative = negative.begin();iterNegative!=negative.end();iterNegative++){ for(map<int,vector<int>*>::iterator iterPositive = positive.begin();iterPositive!=positive.end();iterPositive++){ if(iterNegative->first + iterPositive->first >0 ){ map<int,vector<int>*>::iterator tempIter = negative.find(0-iterNegative->first-iterPositive->first); if(tempIter != negative.end()){ if((tempIter==iterNegative && iterNegative->second->size()>=2) || (tempIter!=iterNegative && (tempIter->second)[0] < (iterNegative->second)[0] )){ intVector.push_back(iterNegative->first); intVector.push_back(tempIter->first); intVector.push_back(iterPositive->first); sort(intVector.begin(),intVector.end()); result.push_back(intVector); intVector.clear(); } } }else if(iterNegative->first + iterPositive->first == 0 ){ //有一个0的情况 if(zero.count(0) && zero[0]->size()>=1){ intVector.push_back(iterNegative->first); intVector.push_back(0); intVector.push_back(iterPositive->first); sort(intVector.begin(),intVector.end()); result.push_back(intVector); intVector.clear(); } }else{ map<int,vector<int>*>::iterator tempIter = positive.find(0-iterNegative->first-iterPositive->first); if(tempIter != positive.end() ){ if((tempIter==iterPositive && iterPositive->second->size()>=2) || (tempIter!=iterPositive && (tempIter->second)[0] < (iterPositive->second)[0] )){ intVector.push_back(iterNegative->first); intVector.push_back(tempIter->first); intVector.push_back(iterPositive->first); sort(intVector.begin(),intVector.end()); result.push_back(intVector); intVector.clear(); } } } } } } return result; }};
阅读全文
0 0
- leeetcode15. 3Sum
- Two Sum && 3 Sum
- 【Leetcode】3Sum (Sum)
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 3sum、3Sum closet、 4sum
- 3Sum, 3Sum Closest, 4 Sum
- leetcode 2 sum 3sum 4sum
- 2Sum 3Sum 4Sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- 3Sum
- 3SUM
- 3-sum
- 3Sum
- 3Sum
- 3Sum
- Yii框架 AR 基础操作
- redis spring 哨兵 配置
- 视觉SLAM14讲学习笔记
- 一点一点学java—概览
- java动态代理处理事务
- leeetcode15. 3Sum
- AdvancedInstaller设置当用户选择中文路径时弹窗警告
- 经典笔试编程题--Java实现
- 定时器工具类
- POJ
- jquery获取当前页面的URL信息
- 二叉树的前中后遍历推导
- 第九篇 蓝牙配对
- 与dalao学校的联shou考wan(11.2)(dp+乱搞+树形dp+期望)