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;          }};
原创粉丝点击