`

4Sum (C++实现)

 
阅读更多

Given an array S of n integers, are there elements abc, 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)

 

class Solution {  
public:  
    vector<vector<int> > fourSum(vector<int> &num, int target) {  
        vector<vector<int> > ret;  
        sort(num.begin(), num.end());  
        for(int i = 0; i < num.size(); ++i) {  
            if(i > 0 && num[i] == num[i-1]) continue;  
            for(int j = i + 1; j < num.size(); ++j) {  
                if(j > i+1 && num[j] == num[j-1]) continue;  
                int k = j + 1, l = num.size() - 1;  
                int tsum = target - num[i] - num[j];  
                while(k < l) {  
                    int t = num[k] + num[l];  
                    if (t > tsum) {--l;}  
                    else if (t < tsum) {++k;}  
                    else {  
                        vector<int> vec({num[i], num[j], num[k], num[l]});
                        ret.push_back(vec);  
                        while(num[++k] == num[k-1]);  
                        while(num[--l] == num[l+1]);  
                    }  
                }  
            }  
        }  
        return ret;  
    }  
};  

 

欢迎关注微信公众号——计算机视觉 

 

0
0
分享到:
评论

相关推荐

    md5摘要算法的C++实现源码

    完整的md5算法实现,readme.txt中有详细的使用说明,移植进项目非常简单。

    C++实现two sum问题的暴力算法

    本文给大家介绍的是C++实现two sum问题的暴力算法,蛮力解法意味着我们需要检查每一个数字与后面是否可以组成target,在数字量不大的情况下还是可以得到很好的效果,所以蛮力法的字符串匹配仍然是得到了实际生活中的...

    C++实现学生成绩统计管理系统

    cout&lt;&lt;"c++的平均成绩是:"&lt;&lt;sum[2]/size; cout(ios::fixed)(0); } else cout当前无学生数据,请添加......"; } void leo::lpcent() //成绩分类 { int p[3][200]; float tem=100.0/size; string a[3]={"英语",...

    c++数据结构与算法实现

    MaxSumTest.cpp: Various maximum subsequence sum algorithms Fig02_09.cpp: Test program for binary search Fig02_10.cpp: Euclid's algorithm, with a test program Fig02_11.cpp: Recursive exponentiation ...

    不能移动的石子合并问题(动态规划/C++实现)

    若排成一行,最小分值:(4+4)+(8+5)+(9+13)=43,最大分值:(9+4)+(13+4)+(17+5)=52。 若排成圈状,最小分值:(4+4)+(8+5)+(9+13)=43,最大分值:(9+5)+(14+4)+(18+4)=54。 此题以第一模型的最低得分为例,很多同学...

    maxsum-cpp:Max-Sum算法在C ++中的实现

    Max-Sum算法在C ++中的实现 该库的API文档可在在线。 依存关系 该项目当前具有两个第三方库依赖项: 本征3: ; 和 Boost 1.48或更高版本: 。 doxygen是编译html中的文档所必需的。 另外,需要LaTeX生成html中...

    记录学习完C语言后,学习C++的过程,实现从C语言到C++的过渡 使用的IDE是QT.rar

    C和C++的区别: C语言可以在C++编译器上完美运行,即C属于C++ C++比C多出来一些函数库 C++是面向对象编程(即有class以及相关...第13行:printf("%lld %lld\n",m,sum); 这三点也是C和C++最基本的区别,下面看C++版本:

    LBG矢量量化C/C++语言实现(可执行)

    对照书上实现了LBG适量量化的算法,共享一下。 LBG是经典的矢量量化算法,通过对训练集的分析,生成矢量量化使用的码本。 实现过程简单明了,就一个CPP文件。 typedef struct _tTSVector { //training set vector...

    C++用类实现大数相加

    #include #include using namespace std; class ds { public: void equal(string x,string y,int n1,int n2); void nequal(string x,string y,int n1... int sum =0; int k = 0; int add[1000]; for(i=0;i;i++)

    基于C++实现的单目多视图立体重建系统源码+项目说明.zip

    基于C++实现的单目多视图立体重建系统源码+项目说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、...

    C++实现银行排队系统

    本文实例为大家分享了C++实现银行排队系统的具体代码,供大家参考,具体内容如下 #include #include #include int cnt=0; //当日客流量 int sum=0; //当日客户排队总时间 typedef struct pnode{ int number; ...

    基于C和C++实现的单目多视图立体重建系统源码+项目说明.zip

    基于C和C++实现的单目多视图立体重建系统源码+项目说明.zip * 数据读取 * 特征点提取和匹配 * 稀疏重建,生成稀疏点云以及估计视图位姿 * 稠密重建,生成每张视图对应的深度图(这里可以进一步生成稠密点云,通过...

    C++ 小型复数计算器

    double real1,real2,image1,image2,real3,real4,image3,image4; CComplex answer,temp; int score=0; char op; for(int i=0;i;i++) { /////为复数产生随机值 real1=rand()%200-100; image1=rand()%200-100; real2=...

    C++实现N个骰子的点数算法

    本文实例讲述了C++实现N个骰子的点数算法,分享给大家供大家参考之用。具体方法如下: 题目要求:把n个骰子仍在地上,所有点数 实现代码如下: #include using namespace std; const int g_maxValue = 6; const ...

    c++代码实现tea加密算法的实例详解

    通过c++来实现tea加密算法,最终编译成so文件,以JNI的方式提供给客户端调用,主要需要解决以下三个问题: 实现tea算法,这都有开源的代码可以实现; 解决padding问题; 密钥做一个混淆,防止编译生成的库文件...

    新手学习C++入门资料

    输入和输出是通过C++类来实现的,cin和cout是这些类的实例,他们是在C++语言的外部实现。 在C++语言中,有了一种新的注释方法,就是‘//’,在该行//后的所有说明都被编译器认为是注释,这种注释不能换行。C++中...

    C++代码实现计算两个数的和并输出结果,还展示函数定义和调用的基本语法

    变量计算和输出:将num1和num2相加,并将结果赋值给变量sum,然后使用std::cout输出结果。 函数调用:在main函数中调用了printMessage函数,以输出一条消息。 返回值:main函数以return 0;结束,将0作为程序的...

    201712-4 ccf c++实现,dijkstra,spfa算法

    然后再加上当前走小路的疲惫值,即 ans[ne]=ans[nn]-sum[nn]sum[nn]+(sum[nn]+next.v)(sum[nn]+next.v),sum更新为当前走小路所累积的路程,即sum[ne]=sum[nn]+next.v,如果走大路,则sum清空为0;ans更新为ans[ne]=...

    面向对象与C++试题.doc

    14、在C++中,用于实现动态多态性的是( )。 A.内联函数 B.重载函数 C.模板函数 D.虚函数 15、不能说明为虚函数的是( )。 A.析构函数 B.构造函数 C.类的成员函数 D.以上都不对 16、如果一个类至少有一个...

    sumofsub.rar_SumOfSub_回溯法_回溯法子集和_子集和数_子集和数问题

    子集和数问题,回溯法实现

Global site tag (gtag.js) - Google Analytics