C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. 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を初期化します。これにより、ペ

  2. 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