4Sum
来源:互联网 发布:moto fastboot软件 编辑:程序博客网 时间:2024/05/10 11:53
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)
与3Sum很相似的一道题,复杂度成了n³logn。但是如果直接这样来的话,TLE,我也是ac以后尝试才发现的。。
其实,就是要加剪枝了。就是如果给定当前的3个数字num[i],num[j],num[h],其中i<j<h,如果num[h+1]>(target-num[i]-num[j]-num[h]),则中断循环。
对于第一层和第二层循环也可以进行相似的判断。
class Solution {public: bool find(vector<int> &num,int start,int end,int target){ while(start<=end){ int mid = (start+end)/2; if(num[mid]>target){ end = mid-1; }else if(num[mid]==target){ return true; }else{ start = mid+1; } } return false; } vector<vector<int> > fourSum(vector<int> &num, int target) { sort(num.begin(),num.end()); vector<vector<int> > vv; vector<int> v; int n = num.size(); for(int i=0;i<n-3;){ v.push_back(num[i]); int t1 = target-num[i]; if(t1<(num[i+1]+num[i+2]+num[i+3])) break; for(int j=i+1;j<n-2;){ int t2 = target-num[i]-num[j]; if(t2<num[j+1]+num[j+2]) break; v.push_back(num[j]); for(int h = j+1;h<n-1;){ int tmp = target-num[i]-num[j]-num[h]; if(h+1<n && num[h+1]>tmp) break; if(find(num,h+1,n-1,target-num[i]-num[j]-num[h])){ v.push_back(num[h]); v.push_back(target-num[i]-num[j]-num[h]); vv.push_back(v); v.pop_back(); v.pop_back(); } h++; while(h<n && num[h]==num[h-1]) h++; } j++; while(j<n && num[j]==num[j-1]) j++; v.pop_back(); } i++; while(i<n && num[i]==num[i-1]) i++; v.pop_back(); } return vv; }};
0 0
- 【Leetcode】4Sum (Sum)
- 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
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- SVN服务器搭建和使用(一)
- 解决Gridview中出现rules="all"
- IOS7适配 总结
- java的内存泄露预防
- Thumbnailator使用简介
- 4Sum
- 不用加减乘除运算符计算两数之和
- IOS 消息机制(NSNotificationCenter)
- 小点
- 抉择让一个人成长
- OpenCV中Haar-like特征人脸检测函数介绍
- 【java performance】为'Vectors' 和 'Hashtables'定义初始大小
- Hbase slides
- 使用Jmail开发php邮件服务器