题目描述:(链接)
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:
- Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
- 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)
解题思路:
排序,左右夹逼!但是时间复杂度O(n^3),哎,待续!
class Solution { public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; if (nums.size() < 4) { return result;} sort(nums.begin(), nums.end()); auto last = nums.end(); for (auto i = nums.begin(); i != last - 3; ++i) { for (auto j = i + 1; j != last - 2; ++j) { auto k = j + 1; auto m = last - 1; while (k < m) { int sum = *i + *j + *k + *m; if (sum < target) { ++k; } else if(sum > target) { --m; } else { result.push_back({*i, *j, *k, *m}); ++k; --m; } } } } sort(result.begin(), result.end()); result.erase(unique(result.begin(), result.end()), result.end()); return result; } };