**Description:**

https://leetcode.com/problems/4sum/#/description

**Algorithm:**

This is totally the same with [15. 3Sum], the elements in the array cannot be reused. And the duplicated elements should be passed.

**Code:**

class Solution {

public:

vector<vector<int>> fourSum(vector<int>& nums, int target) {

if (nums.size() < 4) return{};

int n = nums.size();

int tmp_sum;

vector<vector<int>> result;

sort(nums.begin(), nums.end());

for (int i = 0; i < n – 3; i++)

{

for (int j = i + 1; j < n – 2; j++)

{

int left = j + 1;

int right = n – 1;

while (left < right)

{

tmp_sum = nums[i] + nums[j] + nums[left] + nums[right] – target;

if (tmp_sum < 0)

left++;

else if (tmp_sum > 0)

right–;

else

{

result.push_back({ nums[i], nums[j], nums[left], nums[right] });

**while (left < n – 1 && nums[left] == nums[left + 1]) // these are used for remove the duplicated elements.**

** left++;**

** while (right > 0 && nums[right] == nums[right – 1])**

** right–;**

left++;

right–;

}

}

while (nums[j] == nums[j + 1])

j++;

}

while (nums[i] == nums[i + 1])

i++;

}

return result;

}