leetcode之4sum
阿新 • • 發佈:2018-12-28
題目:
Given an array nums
of n integers and an integer target
, are there elements a, b, c, and d in nums
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.
Example:
Given array nums = [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] ]
程式碼:
#include<iostream> #include<map> #include<vector> #include<algorithm> using namespace std; vector<vector<int>> fourSum(vector<int>& nums, int target) { int len = nums.size(); map<int, int> flags; vector<vector<int>> result; sort(nums.begin(),nums.end()); for (int i = 0; i < len - 3; i++) { for (int j = i + 1; j < len - 2; j++) { for (int m = j + 1; m < len - 1; m++) { for (int n = m + 1; n < len; n++) { vector<int> v; int a = nums[i], b = nums[j], c = nums[m], d = nums[n]; int sum = a + b + c + d; if (sum == target) { v.push_back(a); v.push_back(b); v.push_back(c); v.push_back(d); result.push_back(v); } if ((n < len - 1) && (nums[n] == nums[n + 1])) n++; } if ((m < len - 2) && (nums[m] == nums[m + 1]))m++; } if ((j < len - 3) && nums[j] == nums[j + 1])j++; } if ((i < len - 4) && nums[i] == nums[i + 1])i++; } return result; } int main() { vector<int> v = { 1,0,-1,0,-2,2 }; vector<vector<int>> vv = fourSum(v, 0); for (int i = 0; i < vv.size(); i++) { vector<int> a = vv[i]; for (int j = 0; j < a.size(); j++) { cout << a[j] << " "; } cout << endl; } int m; cin >> m; return 0; }