给定一个n个整数的数组S,是否存在S中的4个数,使得a + b + c + d = target。 在数组中找出所有唯一的四元组,给出目标的总和。
来源:互联网 发布:js invoke 方法 编辑:程序博客网 时间:2024/06/06 02:41
本题源自LeetCode
------------------------------------------
思路1 :回溯法
超时
代码;
vector<vector<int> > fourSum(vector<int> &num, int target) { vector<vector<int>> result; if(num.size()==0) return result; vector<int> path; sort(num.begin(),num.end()); backPath(result,num,path,target,0); return result; } void backPath(vector<vector<int>>& result,vector<int>& num,vector<int> &path,int target,int start){ if(path.size()==4&&target==0){ result.push_back(path); return; } int pre=INT_MAX; for(int i=start;i<num.size();i++){ if(pre==num[i]) continue; path.push_back(num[i]); backPath(result,num,path,target-num[i],start+1); path.pop_back(); } }
思路2:
非递归;先计算俩个值再从剩下的数中选俩个。
代码:
vector<vector<int> > fourSum(vector<int> &num, int target) { vector<vector<int>> result; if(num.size()==0) return result; int n=num.size(); sort(num.begin(),num.end()); //对数组排序 for(int i=0;i<n-3;i++){ for(int j=i+1;j<n;j++){ int sum=target-num[i]-num[j]; //先计算俩个值的和 int start=j+1; //再剩余的数中找到俩个值满足和等于给定值 int end=n-1; while(start<end){ while(start<end&&num[start]+num[end]>sum) end--; if(start==end) break; if(num[start]+num[end]==sum){ vector<int> tmp={num[i],num[j],num[start],num[end]}; result.push_back(tmp); while(start<end&&num[start]==num[start+1]) start++; } start++; } while(j<n-1&&num[j]==num[j+1]) //避免重复的值 j++; } while(i<n-1&&num[i]==num[i+1]) i++; } return result; }
阅读全文
0 0
- 给定一个n个整数的数组S,是否存在S中的4个数,使得a + b + c + d = target。 在数组中找出所有唯一的四元组,给出目标的总和。
- 346/5000 给定一个n个整数的数组S,在S中找到三个整数,使得总和最接近给定数量的目标。 返回三个整数的和。
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- 给定一个整数sum,从有N个无序元素的数组中寻找元素a、b、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
- leetcode-java.T015_3Sum---给定一个n个元素的数组,是否存在a,b,c三个元素,使用得a+b+c=0,找出所有符合这个条件的三元组
- 对于给定的整数集合S,求出最大的d,使得a+b+c=d。
- 在数组中找出两个数a、b,使得a加b等于给定的c
- leetcode-java.T016_threeSumClosest---给定包含n个整数数组S,找到S中的三个整数,从而使之和最接近给定的数,返回三个整数的总和.
- 给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum
- 给出一个有效的算法来确定在整数A1<A2<A3<...<AN的数组中是否存在整数i使得Ai=i
- 给定一个值S,在有序数组中找出两个元素A和B,使 A+B = S.
- 数组A中任意两个相邻元素大小相差1,现给定这样的数组A和目标整数t,找出t在数组A中的位置。
- 题目:请给出一个运行时间为Θ(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素。
- 算法导论 2.3-7 给出一个运行时间为⊙(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个整数x时,判断出S中是否存在有两个其和等于x的元素
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 在由N个正整数的集合S中,找出最大元素C,满足C=A + B
- 题目1.请给出一个运行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和另一个证书x时,判断出S中是否存在有两个其和等于x的元素。
- 机器学习方法在量子多体物理中的应用
- xserver相关知识汇总
- 1541 +1 *2 ²
- 一段日期内星期都是周五的客流信息
- mysql数据库操作(一)
- 给定一个n个整数的数组S,是否存在S中的4个数,使得a + b + c + d = target。 在数组中找出所有唯一的四元组,给出目标的总和。
- form表单提交中的input,button,submit
- webstorm快捷键
- Tesseract-OCR 入门
- 安装eclipse c++版本neno
- 如何在ubuntu里使用资源视图的方式打开任意目录?
- 6-11 Level-order Traversal(25 point(s))
- 20.4 缓存的重定向方法
- 我看 Kotlin