Leetcode-4Sum

来源:互联网 发布:苹果电脑编写代码软件 编辑:程序博客网 时间:2024/06/06 00:42

Given an array S of n integers, are there elements a,b, c, and d in S such that a + b +c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note: The solution set must not contain duplicate quadruplets.

For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.A solution set is:[  [-1,  0, 0, 1],  [-2, -1, 1, 2],  [-2,  0, 0, 2]]
class Solution{public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> ans;sort(nums.begin(), nums.end());if (nums.size() < 4)return ans;if (nums.size() == 4) {if (nums[0] + nums[1] + nums[2] + nums[3] == target) {vector<int> beta;beta.push_back(nums[0]);beta.push_back(nums[1]);beta.push_back(nums[2]);beta.push_back(nums[3]);ans.push_back(beta);return ans;}}int i, j;int n = nums.size();for (i = 0; i < n - 3; i++) {if (i > 0 && nums[i] == nums[i - 1])continue;for (j = i + 1; j < n - 2; j++) {if (j > i+1 && nums[j] == nums[j - 1])continue;int l = j + 1;int m = n - 1;while (l < m) {int s = nums[i] + nums[j] + nums[l] + nums[m];if (s == target) {vector<int> tmp;tmp.push_back(nums[i]);tmp.push_back(nums[j]);tmp.push_back(nums[l]);tmp.push_back(nums[m]);ans.push_back(tmp);while (nums[l] == nums[l + 1])l++;while (nums[m] == nums[m - 1])m--;l++;m--;}else if (l<m && s < target)l++;else if (l<m && s > target)m--;}}}return ans;}};