C++で合計がKに等しい2つの配列からペアをカウントします
2つの配列Arr1[]とArr2[]と数Kが与えられます。目標は、合計がKになるように両方の配列の要素の一意のペアを見つけることです。ペアは(Arr1 [i]、Arr2[j]の形式になります。 ])ここで、Arr1 [i] + Arr2 [j]==K。
iとjの2つのループを使用してトラバースします。合計(Arr1 [i] + Arr2 [j])==Kの場合。また、このペアはunordered_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.
以下のプログラムで使用されているアプローチは次のとおりです
-
2つの配列Arr1[]とArr2[]と、合計のための変数Kを取ります。
-
Len1とLen2は、両方の配列の長さを示すために使用されます。
-
関数pairsumisK(int arr1 []、int arr2 []、int k、int l1、int l2)はすべての変数を受け取り、sum=kの両方の配列から要素の一意のペアの数を返します。
-
ペアの初期変数カウントを0とします。
-
unordered_map umapを使用して、一意のペアを保存します。
-
2つのforループを使用して両方の配列をトラバースします。
-
arr1[]のi=0からi
までのarr2[]の要素の場合 -
合計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
-
C++プログラムで2つの配列から要素を順番に選択することによる最大合計
この問題では、2つの配列arr1[]とarr2[]、および2つの数値NとMが与えられます。 Nは、arr1から取得した要素の数を示します。 Mは、arr2から取得した要素の数を示します。 arr1[i]からarr2[i]までの要素の1つを選択する必要があります。 合計は最大になりますが、最大Nはarr1から取得でき、Mはarr2から取得できます。 私たちのタスクは、C ++で2つの配列から要素を順番に選択することにより、最大合計を見つけるプログラムを作成することです。 問題を理解するために例を見てみましょう 入力 arr1[] = {5, 1, 6, 2, 8, 9} arr2[
-
合計がC++の指定された値xに等しい2つのBSTからペアをカウントします
入力として2つの二分探索木と変数xが与えられます。目標は、ノードの値の合計がxに等しくなるように、各ツリーからノードのペアを見つけることです。 BST_1からノード1を取得し、BST_2からノード2を取得して、両方のデータ部分を追加します。 sum=xの場合。インクリメントカウント。 例を挙げて理解しましょう。 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 1 説明 −ペアは(8,6) 入力 出力 −合計が特定の値xに等しい2つのBSTからのペアの数は− 2 説明 −ペアは(5,15)と(4,16) 以下のプログラムで使用されているアプ