C++ 四数相加

C++ 四数相加,第1张

给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。

为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500 。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1 。

例如:

输入: A = [ 1, 2] B = [-2,-1] C = [-1, 2] D = [ 0, 2] 输出: 2 解释: 两个元组如下:

  1. (0, 0, 0, 1) -> A[0] + B[0] + C[0] + D[1] = 1 + (-2) + (-1) + 2 = 0
  2. (1, 1, 0, 0) -> A[1] + B[1] + C[0] + D[0] = 2 + (-1) + (-1) + 0 =0

思路:

此题和之前的两数之和原理差不多。

本题解题步骤:

  1. 首先定义 一个unordered_map,key放a和b两数之和,value 放a和b两数之和出现的次数。
  2. 遍历大A和大B数组,统计两个数组元素之和,和出现的次数,放到map中。
  3. 定义int变量count,用来统计 a+b+c+d = 0 出现的次数。
  4. 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就用count把map中key对应的value也就是出现次数统计出来。
  5. 最后返回统计值 numbers 就可以了
  6. #include
    #include
    #include
    #include
    using namespace std;
    int four_num_sums(vector&A,vector&B,vector&C,vector&D)
    {
        unordered_mapmap;
        for(int a:A)
        {
            for(int b:B)
            {
                map[a+b]++;
            }
        }
        int numbers=0;//统计次数
        for (int c:C)
        {
            for (int d:D)
            {
                if(map.find(0-(c+d))!=map.end())
                {
                    numbers+=map[0-(c+d)];
                }
            }
        }
        return numbers;
    }
    void print(vector&C)
    {
        for(int i=0;i>A_len;
            vectorA;
            cout<<"输入A元素"<a;
                A.push_back(a);
            }
            cout<<"输入B容器的大小:"<>B_len;
            vectorB;
            cout<<"输入B元素"<>b;
                B.push_back(b);
            }
            cout<<"输入C容器的大小:"<>C_len;
            vectorC;
            cout<<"输入C元素"<>c;
                C.push_back(c);
            }
            cout<<"输入D容器的大小:"<>D_len;
            vectorD;
            cout<<"输入D元素"<>d;
                D.push_back(d);
            }
            int res=four_num_sums(A,B,C,D);
            cout<<"输出:"<

    运行结果:

输入A容器的大小:

2

输入A元素

1

2

输入B容器的大小:

2

输入B元素

-2

-1

输入C容器的大小:

2

输入C元素

-1

2

输入D容器的大小:

2

输入D元素

0

2

输出:2

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/875373.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)