4Sum
来源:互联网 发布:简单的php项目 编辑:程序博客网 时间:2024/04/28 21:43
和2Sum一样样的,只能降低一个量级的复杂度到O(n^3)。
这点代码里还杂糅了一些其他的东西,比如如何跳过重复的元素,当答案里不要重复元素的时候,这个方法很有用。
class Solution {public: vector<vector<int> > fourSum(vector<int> &num, int target) { vector<vector<int>> res; if (num.size() == 0) return res; sort(num.begin(), num.end()); vector<int> t; for (int i = 0; i < num.size(); ++i) { for (int j = i + 1; j < num.size(); ++j) { vector<vector<int>> t = twoSum(num, j + 1, target - num[i] - num[j]); if (t.size() != 0) { for (int k = 0; k < t.size(); ++k) { vector<int> tmp; tmp.push_back(num[i]); tmp.push_back(num[j]); tmp.push_back(t[k][0]); tmp.push_back(t[k][1]); res.push_back(tmp); } } while (j < num.size() - 1 && num[j + 1] == num[j]) j++; } while (i < num.size() - 1 && num[i + 1] == num[i]) i++; } return res; } vector<vector<int>> twoSum(vector<int> &num, int start, int target) { vector<vector<int>> res; int i = start, j = num.size() - 1; while (i < j) { if (num[i] + num[j] == target) { vector<int> t; t.push_back(num[i]); t.push_back(num[j]); res.push_back(t); while (i < j && num[i + 1] == num[i])i++;while (i < j && num[j - 1] == num[j])j--;i++;j--; } else if (num[i] + num[j] > target) j--; else i++; } return res; }};
http://oj.leetcode.com/problems/4sum/
0 0
- 【Leetcode】4Sum (Sum)
- leetcode 2 sum 3sum 4sum
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 2Sum 3Sum 4Sum
- 3sum、3Sum closet、 4sum
- 3Sum, 3Sum Closest, 4 Sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- ntp校时源码-转载
- Activity专题
- [Jweb] Tomcat 解决编码, 乱码问题
- 微信图文消息回复
- userenv和sys_context函数
- 4Sum
- 第17周周赛(大一) --A - Parallelepiped
- oracle执行计划-Nested Loops (nl)-3
- 在一个JSP页面中包含另一个JSP页面的三种方式
- Android内存优化
- 77. 从说“是”开始
- 入口之争:是APP还是移动搜索
- Matlab画一个局部放大的图中图
- DOM4J的使用(DOM4J对XML的解析即增删改查)