[LeetCode]4Sum
2015-10-03 13:29
375 查看
题目描述:(链接)
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.
解题思路:
排序,左右夹逼!但是时间复杂度O(n^3),哎,待续!
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; } };
相关文章推荐
- UVA - 1587 Box
- 04_工具类
- Navigation自定义
- Spring Security 4.0 CAS实现单点登录
- Android Material Design:CoordinatorLayout与NestedScrollView
- pip install遇到编码问题
- HDU 1076 An Easy Task(水~)
- 配置ubuntu和目标板nfs共享
- @Repository @Resource
- android 多媒体数据库详解
- SuiShenJi项目_dialog to Activity动画
- 算法----数组的排序(冒泡 选择 插入)
- 享元模式
- PAT1011 A+B和C (15)
- Swift 2.0 之map 与 zip
- deepin配置root登入
- Ftp上传下载 C#
- Convert Sorted List to Binary Search Tree
- 弱校联萌十一大决战之强力热身 C. Censor (KMP + stack)
- DirectX11 光照演示示例Demo