16-4SUM
来源:互联网 发布:炉石传说淘宝买卡包 编辑:程序博客网 时间:2024/04/30 08:29
4.30更新,已经AC
18. 4Sum My Submissions QuestionEditorial Solution
Total Accepted: 71102 Total Submissions: 299393 Difficulty: Medium
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)
结果:
282 / 282 test cases passed.
Status: Accepted
Runtime: 76 ms
beats:64.95%
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int> > result; sort(nums.begin(),nums.end()); int n=nums.size(); for(int i=0;i<n-1;++i){ for(int j=i+1;j<n;++j){ int front = nums[i]+nums[j]; int beg = j+1,end = n-1; while(beg<end){ int tsum = front + nums[beg]+nums[end]; if(tsum==target){ vector<int> vec; vec.push_back(nums[i]),vec.push_back(nums[j]); vec.push_back(nums[beg]),vec.push_back(nums[end]); result.push_back(vec); while(++beg<end&&nums[beg-1]==nums[beg]); while(--end>beg&&nums[end+1]==nums[end]); } else { if(tsum<target)beg++; else end--; } } } } sort(result.begin(),result.end()); result.erase(unique(result.begin(),result.end()),result.end()); return result; }};
思路:先保存两个整数的和,然后两层循环搞定
平均时间复杂度:
还是time limit,期待更好的解法。。。。
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()); map<int,vector<pair<int,int> > > cache; for(size_t a=0;a<nums.size();++a){ for(size_t b=0;b<nums.size();++b){ cache[nums[a]+nums[b]].push_back(pair<int,int>(a,b)); } } for(int c=0;c<nums.size();++c){ for(size_t d=c+1;d<nums.size();++d){ const int key = target -nums[c]-nums[d]; if(cache.find(key)==cache.end())continue; const auto&vec =cache[key]; for(size_t k=0;k<vec.size();++k){ if(c<=vec[k].second)continue; result.push_back({ nums[vec[k].first],nums[vec[k].second],nums[c],nums[d]}); } } } sort(result.begin(),result.end()); result.erase(unique(result.begin(),result.end()),result.end()); return result; }};
testcase:
- 15. 3Sum && 16 sum closet && 18 4sum
- 16-4SUM
- LeetCode1/16/15/18 Two Sum/3Sum/3Sum Closest/4Sum**
- 类型系列题目:1. Two Sum 15,3 sum ,16 3sum closet, 18 4sum, 454 4Sum II
- 【Leetcode】4Sum (Sum)
- leetcode15&16_3Sum&4Sum
- LeetCode#15* 3Sum && LeetCode#16 3Sum Closest && LeetCode#18 4Sum
- 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
- web.xml 配置中classpath: 与classpath*:的区别
- 黑盒测试的几个实测试设计
- 自己写个AsyncTask
- 基于大数据与深度学习的自然语言对话
- 北京fh项目总结1
- 16-4SUM
- C语言计算字符串长度的几种方法
- ubuntu桌面快捷方式文件内容
- REST客户端 学习笔记
- 导致离屏渲染的情况
- 常见服务器架构
- 内存池——第二章 自定义内存池 & 类似STL内存管理器原理的内存池(2)
- Matlab 2012安装图解
- 第5章 弹性及其应用