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