首页 > 代码库 > leetcode 4SUM

leetcode 4SUM

自己写的比较差的,时间过不去

#include <iostream>
#include <cstdlib>
#include <string>
#include <algorithm>
#include <vector>
#include <stack>
#include <queue>
#include <map>
#include <sstream>
using namespace std;

string ato_string(int value){
    stringstream ss;
    ss << value;
    return ss.str();
}
void out (vector<int> v){
    for(int i = 0; i < v.size(); i++){
        cout<<v[i]<<" ";
    }
    cout<<endl;
}

vector<vector<int> > deep(vector<int> num, int target, int index){
    if (index == 0 || num.size() < index)
    {
        vector<vector<int> > t;
        return t;
    }
    vector<vector<int> > result;
    for(int i = 0; i < num.size(); i++){
        int tmp = num[i];
        if (index == 1)
        {
            if (tmp == target)
            {
                vector<int> t;
                t.push_back(tmp);
                result.push_back(t);
            }
            continue;
        }
        vector<int> copy = num;
        copy.erase(copy.begin() + i);
        vector<vector<int> > re = deep(copy, target - tmp, index-1);
        for (int j = 0; j < re.size(); ++j)
        {
            vector<int> t = re[j];
            t.push_back(tmp);
            result.push_back(t);
        }
    }
    for(int i = 0; i < result.size(); i++){
        sort(result[i].begin(), result[i].end());        
    }
    return result;
}

vector<vector<int> > fourSum(vector<int> &num, int target) {
    vector<vector<int> > r = deep(num, target, 4);
    map<stringbool> m;
    for(int i = 0 ; i != r.size(); ++i){
        string key = ato_string(r[i][0]) + ato_string(r[i][1]) + ato_string(r[i][2]) + ato_string(r[i][3]);
        if(m.find(key) != m.end()){
            r.erase(r.begin()+i);
            i--;
        }else{
            m[key] = true;
        }
    }
    return r;
        
}

int main(int argc, char** argv) {
    vector<int> s;
    s.push_back(-9);
    s.push_back(-2);
    s.push_back(7);
    s.push_back(6);
    s.push_back(-8);
    s.push_back(5);
    s.push_back(8);
    s.push_back(3);
    s.push_back(-10);
    s.push_back(-7);
    s.push_back(8);
    s.push_back(-8);
    s.push_back(0);
    s.push_back(0);
    s.push_back(1);
    s.push_back(-8);
    s.push_back(7);
    vector<vector<int> > r = fourSum(s,4);
    for(int i = 0; i < r.size(); i++){
        out(r[i]);        
    }
    return 0;}

 

leetcode 4SUM