18. 4Sum
2016-02-28 11:20
369 查看
GivenanarraySofnintegers,arethereelementsa,b,c,anddinSsuchthata+b+c+d=target?Findalluniquequadrupletsinthearraywhichgivesthesumoftarget.
Note:
Elementsinaquadruplet(a,b,c,d)mustbeinnon-descendingorder.(ie,a≤b≤c≤d)
Thesolutionsetmustnotcontainduplicatequadruplets.
注意:
加入剪枝条件:
Note:
Elementsinaquadruplet(a,b,c,d)mustbeinnon-descendingorder.(ie,a≤b≤c≤d)
Thesolutionsetmustnotcontainduplicatequadruplets.
注意:
加入剪枝条件:
if(nums[i]+nums[j]+nums[j+1]+nums[j+2]>target) break; if(nums[i]+nums[j]+nums[l-2]+nums[l-1]<target) continue; 加之前120ms,之后20ms。
classSolution{ public: vector<vector<int>>fourSum(vector<int>&nums,inttarget){ intl=nums.size(),sum,left,right,i,j; vector<vector<int>>ans; if(l<4) returnans; sort(nums.begin(),nums.end()); for(i=0;i<l-3;i++) { if(i&&nums[i]==nums[i-1]) continue; for(j=i+1;j<l-2;j++) { if(nums[i]+nums[j]+nums[j+1]+nums[j+2]>target) break; if(nums[i]+nums[j]+nums[l-2]+nums[l-1]<target) continue; if(j>i+1&&nums[j]==nums[j-1]) continue; sum=nums[i]+nums[j]; left=j+1; right=l-1; while(left<right) { if(sum+nums[left]+nums[right]==target) ans.push_back({nums[i],nums[j],nums[left++],nums[right--]}); elseif(sum+nums[left]+nums[right]<target) left++; else right--; while(left>j+1&&nums[left]==nums[left-1]) left++; while(right<l-1&&nums[right]==nums[right+1]) right--; } } } returnans; } };
相关文章推荐
- 在WORD 2007中给公式编号
- java操作xml文件
- iOS中Apple Pay接入详细教程
- 2015年总结
- 研究首屏时间?
- HTML、CSS、JavaScript学习总结
- line-height学习与总结
- 固话座机验证
- Linux Mint (应用软件— 虚拟机:Virtualbox)
- windows平台HTTP代理server搭建(CCproxy)
- 梯度下降算法java实现
- 程序员初学机器学习的四种方式
- 罗隐《筹笔驿怀古》
- android 异常处理--java.io.IOException: 您的主机中的软件中止了一个已建立的连接
- Memcached ----关于存取的小例子
- html textarea 自动在底部滚动的实现方法------终于搞定你
- hdu2021——发工资咯:)
- Java xml object 互转
- Android:代码设置UI
- Java 中判断char 是否为空格 和空