我们给了两个数组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