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
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP