首页 > 学院 > 开发设计 > 正文

LeetCode 18. 4Sum

2019-11-11 05:26:27
字体:
来源:转载
供稿:网友

描述 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]]

分析 先排序,然后左右夹逼,复杂度 O(n3),会超时。 可以用一个 hashmap 先缓存两个数的和,最终复杂度 O(n3)。这个策略也适用于 3Sum 。

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 a = nums.begin(); a < PRev(last, 3); ++a) { for (auto b = next(a); b < prev(last, 2); ++b) { auto c = next(b); auto d = prev(last); while (c < d) { if (*a + *b + *c + *d < target) ++c; else if (*a + *b + *c + *d > target) --d; else { result.push_back({*a, *b, *c, *d}); ++c; --d; } } } } sort(result.begin(), result.end()); result.erase(unique(result.begin(), result.end()), result.end()); // 删除重复项 return result; }};
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表