LeetCode 4sum
来源:互联网 发布:淘宝客服是干什么的 编辑:程序博客网 时间:2024/06/16 19:44
链接:https://oj.leetcode.com/problems/4sum/
一种方法是跟3sum一样,使用头尾指针交替移动,时间复杂度为O(n3),空间复杂度为O(1),注意去重
class Solution{public:vector<vector<int> >fourSum(vector<int> &num,int target){vector<vector<int> > ans;sort(num.begin(),num.end());int n=num.size();for(unsigned int i=0;i<n;i++){ if(i > 0 && num[i] == num[i-1]) continue;for(unsigned int j=i+1;j<n;j++){ if(j > i + 1 && num[j] == num[j-1]) continue;int st=j+1,en=n-1;while(st<en){ if(st>j+1&&num[st]==num[st-1]) { st++; continue; } if(en<n-1&&num[en]==num[en+1]) { en--; continue; }int sum=num[i]+num[j]+num[st]+num[en];if(sum>target)en--;if(sum<target)st++;if(sum==target){vector<int> tem;tem.push_back(num[i]);tem.push_back(num[j]);tem.push_back(num[st]);tem.push_back(num[en]);ans.push_back(tem);tem.clear();st++;en--;}}}}return ans;}};
还有一种比较高效的方法是牺牲空间复杂度去换取时间复杂度:
使用哈希表储存所有元素两两的和,然后在做一次2sum.
而且,2sum是有线性算法的:把所有元素放如哈希表中,通过哈希表判断target-num是否存在,因为利用了哈希表,所以每次判断只需常数级的时间。
去重的话,可以考虑set
0 0
- 【Leetcode】4Sum (Sum)
- leetcode 2 sum 3sum 4sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- [LeetCode] 2Sum, 3Sum, 4Sum, 3SUm closet
- [LeetCode] K sum(2Sum、3Sum、4Sum)
- leetcode--sum集合:2sum,3sum,4sum
- leetcode --- 2 sum , 3 sum , 4 sum , k sum problem
- LeetCode: 4 Sum
- LeetCode: 4Sum
- LeetCode 4Sum
- Leetcode: 4SUM
- 【leetcode】 4 sum
- LeetCode 4Sum
- leetcode 44: 4Sum
- [Leetcode] 4 Sum [Unsolved]
- 【leetcode】4Sum
- 39个让你受益的HTML5教程
- Distinct Subsequences
- Leetcode:Binary Search Tree Iterator
- 使用 Apache MINA2 实现 Web 系统的消息中间件
- HDOJ 1240 Asteroids!
- LeetCode 4sum
- windows7下,php开启curl模块
- 学习验证码笔记一
- android Animation 动画效果介绍
- HDOJ 题目4268 Alice and Bob(multiset,贪心)
- Android NDK 学习(3) 从零开始写一个HelloNDK程序
- Floodlight路由机制解析(Floodlight教程)
- Transform Filter 代码(转)
- 如何开发一个Transform Filter(值得参考)