3-sum问题

来源:互联网 发布:tensorflow mnist代码 编辑:程序博客网 时间:2024/06/14 13:10

今天做题遇到了 整理一下
my first blog
参考自http://blog.csdn.net/shaya118/article/details/40755551

/*3sum大意:给定数组元素的个数以及具体的数组,求数组中存在a+b=c有多少种可能,输出其可能数*/#include <iostream>#include <algorithm>#include <vector>using namespace std;int cal_sum3(vector <int>d, int n){    int res = 0;    for (int k = 0; k < n; k++) //遍历数组,用类似快排的方法来找到res    {        for (int i = 0, j = n - 1; i < j; )        {            if (i == k)   //避免d[i]或者d[j]与d[k]重合            {                i++;                continue;            }            if (j == k)            {                j--;                continue;            }            if (d[i] + d[j] > d[k])                j--;            else if (d[i] + d[j] < d[k])                i++;            else            {                res++;                j--;                i++;            }        }    }    return res;}int main(){    int n; cin >> n;    vector<int> d(n);    for (int i = 0; i < n; i++)        cin >> d[i];    sort(d.begin(), d.end());//先排序    cout << cal_sum3(d, n);    getchar();    return 0;}
原创粉丝点击