3Sum & 3Sum Closest & 4Sum
来源:互联网 发布:商标logo设计软件 编辑:程序博客网 时间:2024/03/28 19:19
简单延续2sum的做法,用循环,不过代码比较长。原本很多地方写了break,后来发现都不应该加。
class Solution {public: vector<vector<int> > threeSum(vector<int> &num) { vector<vector<int> > res; int n=num.size(); if (n<=2) return res; sort(num.begin(),num.end()); int pret=-999; for (int i=0; i<n-2; i++) { if (num[i]==num[i-1] && i>0) { continue; } int target = 0-num[i]; map<int, int> m; for (int j=i+1; j<n; j++) { while (num[j]==num[j-1] && j<n && pret==target) { j++; } if (j==n) break; if (m.find(num[j])!=m.end()) { vector<int> cur; cur.push_back(num[i]); cur.push_back(m[num[j]]); cur.push_back(num[j]); res.push_back(cur); pret=target; }else { m[target-num[j]]=num[j]; } } } return res; }};
3Sum Closest
O(n^2),内层循环和Container With Most Water的思路相同
class Solution {public: int threeSumClosest(vector<int> &num, int target) { int n=num.size(); if (!n) return 0; sort(num.begin(),num.end()); int min=9999; int res=0; for (int i=0; i<n; i++) { int j=i+1, k=n-1; while (j<k) { int cur=num[i]+num[j]+num[k]; if (abs(cur-target)<min) { min=abs(cur-target); res=cur; } if (cur==target) { return target; }else if(cur>target) { k--; }else { j++; } } } return res; }};
4Sum
O(n^3)
use sort erase and unique to remove duplicates in a vector
class Solution {public: vector<vector<int> > fourSum(vector<int> &num, int target) { int n=num.size(); vector<vector<int>> res; if (!n) return res; sort(num.begin(), num.end()); for (int i=0; i<n-3; i++) { for (int j=i+1; j<n-2; j++) { int k=j+1, l=n-1; while (k<l) { int cur=num[i]+num[j]+num[k]+num[l]; if (cur==target) { vector<int> temp; temp.push_back(num[i]); temp.push_back(num[j]); temp.push_back(num[k]); temp.push_back(num[l]); res.push_back(temp); do k++; while (num[k]==num[k-1]); do l--; while (num[l]==num[l+1]); }else if (cur>target) { do l--; while (num[l]==num[l+1]); }else { do k++; while (num[k]==num[k-1]); } } } } sort(res.begin(), res.end() ); res.erase( unique( res.begin(), res.end() ), res.end() ); return res; }};
0 0
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 3Sum, 3Sum Closest, 4 Sum
- Two Sum & 3Sum & 3Sum Closest & 4Sum
- Two Sum,3Sum,3Sum Closest,4Sum
- leetcode 3sum closest && 4sum
- 3 Sum & 3 Sum Closest
- 【Leetcode】3Sum Closest (Sum)
- 【LeetCode】3Sum && 3Sum Closest && 4Sum
- leetcode 3Sum 3Sum Closest 4Sum
- LeetCode OJ - 3Sum、3Sum Closest、4Sum
- LeetCode 3Sum&&3Sum Closest&&4Sum
- LeetCode:3Sum, 3Sum Closest, 4Sum
- 【leetcode X Sum 系列】Two Sum|3Sum|3Sum Closest|4Sum
- LeetCode: 3 Sum Closest
- 3Sum Closest
- leetcode - 3 sum closest
- leetcode 3Sum Closest
- 3Sum-LeetCode
- 补码
- sensor hub
- Safari(苹果)浏览器和IE浏览器修改UserAgent方法
- 软件版本号的命名格式和规则
- 3Sum & 3Sum Closest & 4Sum
- 什么是内存泄漏
- thinking in asp 之八 做架构还是豪做友
- 操作系统的中断机制
- 成为Linux内核高手的四个方法
- 从1.5k到18k, 一个程序员的5年成长之路
- 计算机基础课程的重要性
- 技术人员的10个层次,时刻提醒自己
- MinGW升级到4.5.2生成的exe需要libgcc_s_dw2-1.dll和libstdc++-6.dll