C++中从两个数组中计数和等于K的数对


给定两个数组Arr1[]和Arr2[]以及一个数字K。目标是找到两个数组元素的唯一数对,使得它们的和为K。数对的形式为(Arr1[i], Arr2[j]),其中Arr1[i]+Arr2[j]==K。

我们将使用两个循环遍历i和j。如果和(Arr1[i]+Arr2[j])==K,并且该数对不存在于unordered_map<int,int>中。将其添加到map中并递增计数。

让我们通过例子来理解。

输入

Arr1[]={ 1,3,2,4,3,2 }; Arr2[]={ 0,2,1,2,3 }; K=4

输出

Number of pairs with sum K : 4

说明

Pairs will be
( Arr1[0], Arr2[4] ) → (1,3)
( Arr1[1], Arr2[2] ) → (3,1)
( Arr1[2], Arr2[1] ) → (2,2)
( Arr1[3], Arr2[2] ) → (3,1)
All other pairs already exist.Total unique pairs 4.

输入

Arr1[]={ 0,2,1,2,3}; Arr2[]={ 1,1,1,1,1 }; K=3

输出

Number of pairs with sum K : 1

说明

Pairs will be
( Arr1[1], Arr2[0] ) → (2,1)
All other pairs already exist.Total unique pairs 1.

下面程序中使用的算法如下

  • 我们取两个数组Arr1[]和Arr2[]以及一个用于求和的变量K。

  • Len1和Len2用于表示两个数组的长度。

  • 函数pairsumisK(int arr1[],int arr2[],int k,int l1,int l2)获取所有变量并返回两个数组中和为k的唯一元素对的计数。

  • 将初始变量count设置为0,表示数对的数量。

  • 使用unordered_map umap存储唯一数对。

  • 使用两个for循环遍历两个数组。

  • 对于arr1[]中的元素,从i=0到i<len1。对于arr2[]中的元素,从j=0到j<len2。

  • 检查arr1[i]+arr2[j]=k是否成立。如果成立,则检查该数对是否通过umap.find(....)==umap.end()存在。

  • 如果不存在,则将该数对添加到umap中并递增计数。

  • 在所有循环结束后,count将包含此类数对的总数。

  • 返回计数作为结果。

示例

在线演示

#include <bits/stdc++.h>
using namespace std;
int pairsumisK(int arr1[],int arr2[],int k,int l1,int l2){
   int count = 0;
   unordered_map<int, int> umap;
   for (int i = 0; i < l1; i++){
      for (int j = 0; j < l2; j++){
         int sum=arr1[i]+arr2[j];
         if(sum==k) //pairs with sum=k only{
            if(umap.find(arr1[i]) == umap.end()) //unique pairs only{
               umap.insert(make_pair(arr1[i],arr2[j]));
            }
         }
      }
   }
   return count;
}
int main(){
   int Arr1[]={ 1,2,3,0,2,4 };
   int Arr2[]={ 3,2,5,2 };
   int len1=sizeof(Arr1)/sizeof(Arr1[0]);
   int len2=sizeof(Arr2)/sizeof(Arr2[0]);
   int K=5; //length of array
   cout <<endl<< "Number of pairs with sum K : "<<pairsumisK(Arr1,Arr2,K,len1,len2);
   return 0;
}

输出

如果我们运行上述代码,它将生成以下输出:

Number of pairs with sum K : 0

更新于:2020年10月31日

242 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.