Leetcode[18]-4Sum
2015-06-09 19:21
477 查看
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.
分析:和上道题有点类似,多了一层循环,注意该循环的条件就行.
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.
分析:和上道题有点类似,多了一层循环,注意该循环的条件就行.
class Solution { public: vector<vector<int> > fourSum(vector<int>& nums, int target) { vector<vector<int> > result; int n = nums.size(); if(n < 4) return result; sort(nums.begin(),nums.end()); for(int i = 0; i < n; i++) { if(i>0 && nums[i] == nums[i-1]) continue; for(int j = i+1; j < n; j++){ if(j > i+1 && nums[j]== nums[j-1]) continue; fourNumber(nums,result,i,j,target); } } return result; } void fourNumber(vector<int> & nums,vector<vector<int> > &results, int curIndex1,int curIndex2,int target){ int i = curIndex2 + 1; int j = nums.size()-1; while(i<j) { if(nums[curIndex1] + nums[curIndex2] + nums[i] + nums[j] < target ) i++; else if(nums[curIndex1] + nums[curIndex2] + nums[i] + nums[j] > target ) j--; else { vector<int> vec; vec.push_back(nums[curIndex1]); vec.push_back(nums[curIndex2]); vec.push_back(nums[i]); vec.push_back(nums[j]); results.push_back(vec); i++,j--; while(i < j && nums[i] == nums[i-1])i++; while(j > i && nums[j] == nums[j+1])j--; } } } };
相关文章推荐
- 集锦
- 第十四周 阅读程序二
- Yii2 使用十七 国际化
- JDK各个版本的新特性jdk1.5-jdk8
- 20150526数据编码
- java.net.URISyntaxException的解决办法
- 如何进行Android客户端的优化?
- 软件文档知多少?
- 战天
- backtrack 使用Tab键补全命令
- Cpp Primer<<学习IO标准库--输出缓冲区的管理、文件输入与输出_6
- 升级IOS9,提示滑动升级,卡在密码锁屏界面,无反应了
- [Linux Shell]Access Windows Share Folder From Linux
- 如何写系统分析书
- 网络聚合CIDR配置OSPF、RIP路由重分发配置实例
- 20150525进制转换_Xcode
- Java学习篇之---Gson(Maven)
- 管家婆进销存7.2最完美的破解免安装版(已整合最新打印管理器)
- ubuntu下安装jdk
- android&Bluetooth