LeetCode之18_4Sum
来源:互联网 发布:手机安全中心软件 编辑:程序博客网 时间:2024/06/05 21:58
题目原文:
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]]
题意分析:
与前面的3sum类似,唯一的差别是这次变成了四个数字的组合,解题思路与16_3Sum Closest相似,这次用target减去两个选出的数作为目标。
若加入分支限界等思路可的得到更好的效率。
解题代码:
#include <iostream>#include <vector>#include <set>#include<algorithm>using namespace std;class Solution {public:vector<vector<int>> fourSum(vector<int>& nums, int target) {//返回所有可能的组合的容器set<vector<int>> vv_Ret;vector<vector<int>> Ret;int nLen = nums.size();if (nLen<4){return Ret;}sort(nums.begin(),nums.end());for (int a = 0; a<nLen-3;a++){for (int b = a+1; b<nLen-2;b++){int nTempTarget = target-nums[a]-nums[b];int c = b+1;int d = nLen-1;while (c<d){int nNowSum = nTempTarget-nums[c]-nums[d];if (nNowSum < 0){d--;continue;}else if (nNowSum > 0){c++;continue;}else if (nNowSum == 0){vector<int> vTemp;vTemp.push_back(nums[a]);vTemp.push_back(nums[b]);vTemp.push_back(nums[c]);vTemp.push_back(nums[d]);vv_Ret.insert(vTemp);c++;}}}}/*vector<vector<int>>::iterator iter;iter = unique(vv_Ret.begin(),vv_Ret.end());if(iter != vv_Ret.end()){vv_Ret.erase(iter,vv_Ret.end());}*/for (set<vector<int>>::iterator ite = vv_Ret.begin(); ite!= vv_Ret.end();ite++){Ret.push_back(*ite);}return Ret;}};
0 0
- LeetCode之18_4Sum
- 【LeetCode】18_4Sum
- LeetCode 18_4Sum
- leetcode第一刷_4Sum
- 0018_4Sum
- LeetCode之旅(18)
- LeetCode之18---4Sum
- LeetCode 之
- LeetCode之旅(18)-Happy Number
- LeetCode第18题之4Sum
- LeetCode之Surrounded Regions
- LeetCode之Palindrome Partitioning
- LeetCode之Word Ladder
- leetcode之Same Tree
- leetcode之sqrt(x)
- leetcode之atoi
- leetcode之Reverse Integer
- leetcode之subsets
- 大数阶乘
- java 中equals与 ==的区别
- 面向对象总结(一)
- Validate Binary Search Tree
- 安卓开机LOGO动画
- LeetCode之18_4Sum
- Visual Studio2008 编译器 编辑代码时左侧显示行号
- SQL的四种连接-左外连接、右外连接、内连接、全连接
- 谈谈运维体系
- 屏幕适配一:基本概念及原理
- 安卓开发之onMeasure的使用
- 批量检测链接是否存在
- Oracle 创建表空间,用户,并赋予DBA权限
- socket通信简介