class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
//map< int, vector<int> > hashmap;
map< int, int > hashneg;
map< int, int > hashpos;
vector< vector<int> > res;
//map< vector<int>, int > hashres;
vector<int>::iterator it;
int i = 0;
int c_zero = 0;
int len = num.size();
if (len < 3) {
return res;
}
sort(num.begin(), num.end());
vector<int> vec(len);
i = 0;
for (it = num.begin(); it != num.end(); it++) {
//cout<<*it<<endl;
vec[i] = *it;
i++;
}
//return res;
int zero_pos = 0;
int pos = -1;
int neg;
int k,j, t;
for (k = 0; k < len; k++) {
if (vec[k] == 0) {
zero_pos = k;
c_zero++;
} else if (vec[k] < 0) {
if (!hashneg.count(vec[k])) {
hashneg[vec[k]] = 1;
} else {
hashneg[vec[k]]++;
}
} else {
if (!hashpos.count(vec[k])) {
hashpos[vec[k]] = 1;
} else {
hashpos[vec[k]]++;
}
}
}
if (c_zero > 2) {
res.push_back(vector<int>());
res.back().push_back(0);
res.back().push_back(0);
res.back().push_back(0);
}
int a, b;
int last = vec[0];
int last_k = 10000;
for (k = 0; vec[k] < 0; k++) {
last = vec[0];
if (vec[k] == last_k) {
continue;
}
//cout<<"neg k "<<vec[k]<<endl;
for (j = k + 1; vec[j] < 0; j++) {
if (vec[j] != last) {
//vec[j] = last;
} else {
continue;
}
//cout<<"neg j "<<vec[j]<<endl;
b = -(vec[k] + vec[j]);
if (hashpos.count(b)) {
res.push_back(vector<int>());
res.back().push_back(vec[k]);
res.back().push_back(vec[j]);
res.back().push_back(b);
}
last = vec[j];
}
last_k = vec[k];
}
if (c_zero > 0) {
last = -1000;
for (k = 0; vec[k] < 0; k++) {
if (vec[k] == last) {
continue;
}
b = -(vec[k]);
if (hashpos.count(b)) {
res.push_back(vector<int>());
res.back().push_back(vec[k]);
res.back().push_back(0);
res.back().push_back(b);
}
last = vec[k];
}
}
last_k = -10000;
for (k = 0; k < len - 1; k++) {
last = -10000;
if (vec[k] <= 0) {
continue;
}
if (vec[k] == last_k) {
continue;
}
//cout<<"pos"<<vec[k]<<endl;
for (j = k + 1; j < len; j++) {
if (vec[j] != last) {
//vec[j] = last;
} else {
continue;
}
b = -(vec[k] + vec[j]);
if (hashneg.count(b)) {
res.push_back(vector<int>());
res.back().push_back(b);
res.back().push_back(vec[k]);
res.back().push_back(vec[j]);
}
last = vec[j];
}
last_k =vec[k];
}
return res;
}
};
3Sum
最新推荐文章于 2022-01-27 22:44:32 发布