class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<vector<int> > ret;
if (num.empty()) return ret;
sort(num.begin(), num.end());
for (int i = 0; i < num.size(); i++) {
if (i && num[i] == num[i - 1])
continue;
int a = num[i];
int j = i + 1;
int k = num.size() - 1;
while (j < k) {
int b = num[j];
int c = num[k];
if (a + b + c == 0) {
vector<int> sln;
sln.push_back(a);
sln.push_back(b);
sln.push_back(c);
ret.push_back(sln);
for (j++; j < k && num[j] == num[j - 1]; j++);
for (k--; j < k && num[k] == num[k + 1]; k--);
} else if (a + b + c < 0) {
for (j++; j < k && num[j] == num[j - 1]; j++);
} else {
for (k--; j < k && num[k] == num[k + 1]; k--);
}
}
}
return ret;
}
};
Small Case: 8ms
Large Case: 288ms
Time: O(n^2)
Space: O(n)