3
vector<vector<int>> fourSum(vector<int> &nums, int target) {6
vector<vector<int>> answer;8
if (n < 4) return answer;10
sort(nums.begin(), nums.end());12
for (int i = 0; i < n;) {13
for (int j = i + 1; j < n;) {17
long long int x = (long long int)target - (long long int)nums[i] - (long long int)nums[j];19
while (left < right) {20
if (x == nums[left] + nums[right]) {21
vector<int> vect{nums[i], nums[j], nums[left], nums[right]};22
answer.push_back(vect);24
// skipping duplicates while moving right26
while ((left + k) < n && nums[left + k] == nums[left]) ++k;33
// skipping duplicates while moving left35
while ((right - k) >= 0 && nums[right - k] == nums[right]) ++k;43
if (x > nums[left] + nums[right]) {44
// skipping duplicates while moving right46
while ((left + k) < n && nums[left + k] == nums[left]) ++k;54
// skipping duplicates while moving left56
while ((right - k) >= 0 && nums[right - k] == nums[right]) ++k;66
// skipping duplicates while moving right68
while ((j + k) < n && nums[j + k] == nums[j]) ++k;76
// skipping duplicates while moving right78
while ((i + k) < n && nums[i + k] == nums[i]) ++k;