LeetCode 18. 4Sum
来源:互联网 发布:32位嵌入式知乎 编辑:程序博客网 时间:2024/04/29 20:17
描述
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; }};
0 0
- LeetCode --- 18. 4Sum
- [Leetcode] 18. 4Sum
- leetcode 18. 4Sum
- 18. 4Sum LeetCode
- leetcode 18. 4Sum
- 【LeetCode】18. 4Sum
- LeetCode - 18. 4Sum
- leetcode 18. 4Sum
- Leetcode 18. 4Sum
- LeetCode 18. 4Sum
- 【leetcode】18. 4Sum
- leetcode 18. 4Sum
- [leetcode]18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- [LeetCode] 18. 4Sum
- LeetCode 18. 4Sum
- [POJ1151] Atlantis - 矩形切割
- CSS的三大特性记录
- 有向图强连通分量的Tarjan算法
- C语言中手把手教你动态内存分配
- IDEA代码生成插件CodeMaker
- LeetCode 18. 4Sum
- 壁纸
- Mac MAMP 使用终端shell操作mysql数据库
- 线程与信号
- 《剑指offer》 NO.2 替换空格
- MD5加密算法
- C++语言--多态性-8.1----多重继承、虚基类、虚函数和纯虚函数
- LightOJ 1125 dp
- 【Maven】Nexus的安装和配置