LeetCode 18. 4Sum
来源:互联网 发布:淘宝分期付款额度 编辑:程序博客网 时间:2024/06/05 09:32
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: 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]]
本题与前面15题3 SUM可以说几乎没有太多区别,尽管多了一个数,但思路完全一样,对于数组中每个数num[i],相当于求3 sum 的结果为target- num[i]。因此可以用几乎一样的方法进行求解。
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> res; if(nums.size()<4) return res; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size()-3;i++){ int t=target-nums[i]; for(int j=i+1;j<nums.size();j++){ int a=j+1,b=nums.size()-1; while(a<b){ int sum=nums[j]+nums[a]+nums[b]; if(sum==t){ vector<int> d(4,0); d[0]=nums[i]; d[1]=nums[j]; d[2]=nums[a]; d[3]=nums[b]; res.push_back(d); while(a<b&&nums[b]==d[3]) b--; while(a<b&&nums[a]==d[2]) a++; } else if(sum<t) a++; else b--; } while(j<nums.size()-1&&nums[j+1]==nums[j]) j++; } while(i<nums.size()-1&&nums[i+1]==nums[i]) i++; } return res; }};
阅读全文
0 0
- LeetCode --- 18. 4Sum
- [Leetcode] 18. 4Sum
- leetcode 18. 4Sum
- 18. 4Sum LeetCode
- leetcode 18. 4Sum
- 【LeetCode】18. 4Sum
- LeetCode - 18. 4Sum
- leetcode 18. 4Sum
- Leetcode 18. 4Sum
- LeetCode 18. 4Sum
- 【leetcode】18. 4Sum
- leetcode 18. 4Sum
- [leetcode]18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- leetcode 18. 4Sum
- [LeetCode] 18. 4Sum
- LeetCode 18. 4Sum
- 515. Find Largest Value in Each Tree Row
- 连续子数组的最大和
- Java多线程的常见例子
- 腾讯云centos7搭建javaweb服务器(本人亲自经历,详细)
- CSDN资料要完善到什么程度才算100%,就差5%了!http://img.blog.csdn.net/20170705200409612
- LeetCode 18. 4Sum
- Android studio 事件总线RxBus学习总结
- 微信公众号相关的设置
- 2017.07.05回顾
- Fontawesome字体使用说明及其常用效果语法
- eclipse-tomcat部署maven项目方式之四
- OpenGL ES Android 基础(一)
- Android 开发ListView学习总结
- typeof的缺点以及解决方式