计算来自两个数组的对,它们在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(intarr1[],intarr2[],intk,intl1,intl2)获取所有变量,并从两个数组中以sum=k返回唯一的元素对数。
对的初始变量计数为0。
使用unordered_mapumap来存储唯一对。
使用两个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