Description

Submission
The solution is bounded to be O(N^3), so we only need to iterate through the 2 outer loops and then solving the 2Sum problem in O(N).
[0],0 and [0,0,0,0],0 are 2 special cases.
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> res;
if(nums.size() < 4) return res;
sort(nums.begin(), nums.end());
for(int i = 0; i < nums.size(); ++i) {
for(int j = i + 1; j < nums.size(); ++j) {
int tgt = target - nums[i] - nums[j];
for(int x = j + 1, y = nums.size() - 1; x < y; ) {
int total = nums[x] + nums[y];
if(total < tgt) x++;
if(total > tgt) y--;
if(total == tgt) {
res.push_back({nums[i], nums[j], nums[x], nums[y]});
while(x < y && nums[x] == nums[x + 1]) x++;
x++;
while(x < y && nums[y] == nums[y - 1]) y--;
y--;
}
}
while(j + 1 < nums.size() && nums[j] == nums[j+1]) j++;
}
while(i + 1 < nums.size() && nums[i] == nums[i+1]) i++;
}
return res;
}
};
