Leetcode-4Sum

xiaoxiao2021-02-28  109

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; } };
转载请注明原文地址: https://www.6miu.com/read-46832.html

最新回复(0)