C++の2つのアレイからの一意のペアの最大化
問題の説明
サイズNが等しい2つの配列が与えられた場合、それらの要素を使用して最大数のペアを形成します。1つは最初の配列から、2つ目は2番目の配列から、各配列の要素が最大1回使用され、選択されたものの絶対差が使用されます。ペアを形成するために使用される要素は、特定の要素K以下です。
例
入力が-
の場合arr1 [] ={3、4、5、2、1}
arr2 [] ={6、5、4、7、15}
k =3の場合、絶対差が3 −
以下の次の4つのペアを形成できます。(1、4)、(2、5)、(3、6)、(4、7)
アルゴリズム
この問題を解決するために再帰的アプローチを使用できます
- 両方のアレイを並べ替える
- ペアを形成できる場合は、最初の配列の各要素を2番目の配列の各要素と比較して、可能なペアを探します。
- 最初の配列の次の要素の次の可能なペアを引き続き確認します。
例
例を見てみましょう-
#include <bits/stdc++.h> using namespace std; int getMaxUniquePairs(int *arr1, int *arr2, int n, int k) { sort(arr1, arr1 + n); sort(arr2, arr2 + n); bool visited[n]; memset(visited, false, sizeof(visited)); int pairCnt = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (abs(arr1[i] - arr2[j]) <= k && visited[j] == false) { ++pairCnt; visited[j] = true; break; } } } return pairCnt; } int main() { int arr1[] = {3, 4, 5, 2, 1}; int arr2[] = {6, 5, 4, 7, 15}; int n = sizeof(arr1) / sizeof(arr1[0]); int k = 3; cout << "Maximum unique pairs = " << getMaxUniquePairs(arr1, arr2, n, k) << endl; return 0; }
出力
Maximum unique pairs = 4
-
C++でソートされた2つの配列から最も近いペアを見つけます
2つのソートされた配列と1つの数xがあるとすると、合計がxに最も近いペアを見つける必要があります。そして、ペアには各配列の要素があります。 2つの配列A1[0..m-1]とA2[0..n-1]、および別の値xがあります。 (A1 [i] + A2 [j] – x)の絶対値が最小になるようにペアA1 [i] +A2[j]を見つける必要があります。したがって、A1 =[1、4、5、7]、A2 =[10、20、30、40]、x =32の場合、出力は1と30になります。 A1の左側から開始し、A2の右側から開始し、次の手順に従ってそのようなペアを見つけます diffを初期化します。これにより、ペ
-
C++を使用して2つのソートされた配列をマージします。
問題の説明 与えられた2つのソートされた配列リスト。与えられた2つのソートされた配列を1つにマージする関数を記述します Arr1[] = {10,15, 17, 20} Arr2[] = {5, 9, 13, 19} Result[] = {5, 9, 10, 13, 15, 17, 19, 20} アルゴリズム 1. Traverse both array 1.1. If arr1[i] < arr2[j] 1.1.1. Add arr[i] to new array 1.1