三数之和
举一反三
class Solution
{
public:vector<vector<int>> fourSum(vector<int> &nums, int target){sort(nums.begin(), nums.end());vector<vector<int>> ret;int first = 0, n = nums.size();while (first < n){int second = first + 1;while (second < n){int left = second + 1, right = n - 1;long long aim = (long long)target - nums[first] - nums[second];while (left < right){int sum = nums[left] + nums[right];if (sum < aim)left++;else if (sum > aim)right--;else{ret.push_back({nums[first], nums[second], nums[left++], nums[right--]});while (left < right && nums[left] == nums[left - 1])left++;while (left < right && nums[right] == nums[right + 1])right--;}}second++;while (second < n && nums[second] == nums[second - 1])second++;}first++;while (first < n && nums[first] == nums[first - 1])first++;}return ret;}
};