计算来自两个数组的对,它们在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>中不存在。将其添加到映射并增加计数。

让我们通过示例来理解。

输入值 

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)获取所有变量,并从两个数组中以sum = k返回唯一的元素对数。

  • 对的初始变量计数为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并增加计数。

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

  • 返回计数结果。

示例

#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
猜你喜欢