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

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を初期化します。これにより、ペアとxの違いが保持されます
  • 左:=0と右:=n –1の2つのポインタを初期化します
  • 左<=m、右> =0のときに、
    • if |A1[左]+A2[右]–合計|
    • 差分と結果を更新
  • if(A1 [left] + A2 [right])
  • 左に1つ増やします
  • それ以外の場合
    • 権利を1つ減らす
  • 結果を表示する
  • #include<iostream>
    #include<cmath>
    using namespace std;
    
    void findClosestPair(int A1[], int A2[], int m, int n, int x) {
       int diff = INT_MAX;
       int left_res, right_res;
    
       int left = 0, right = n-1;
       while (left<m && right>=0) {
          if (abs(A1[left] + A2[right] - x) < diff) {
             left_res = left;
             right_res = right;
             diff = abs(A1[left] + A2[right] - x);
          }
    
          if (A1[left] + A2[right] > x)
          right--;
          else
          left++;
       }
    
       cout << "The closest pair is [" << A1[left_res] << ", "<< A2[right_res] << "]";
    }
    
    int main() {
       int ar1[] = {1, 4, 5, 7};
       int ar2[] = {10, 20, 30, 40};
    
       int m = sizeof(ar1)/sizeof(ar1[0]);
       int n = sizeof(ar2)/sizeof(ar2[0]);
    
       int x = 32;
       findClosestPair(ar1, ar2, m, n, x);
    }

    出力

    The closest pair is [1, 30]

    1. 2つのソートされた配列から最も近いペアを見つけるJavaプログラム

      ソートされた2つの配列から最も近いペアを見つけるための、Javaコードは次のとおりです- 例 public class Demo {    void closest_pair(int my_arr_1[], int my_arr_2[], int arr_1_len, int arr_2_len, int sum){       int diff = Integer.MAX_VALUE;       int result_l = 0, result_r = 0;       int l

    2. 2つのソートされた配列から最も近いペアを見つけるためのPythonプログラム

      この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 − 2つの配列が与えられたので、2つのソートされた配列から最も近いペアを見つける必要があります 次に、以下の実装のソリューションを見てみましょう- 例 # sys module import sys # pair def print_(ar1, ar2, m, n, x):    # difference    diff=sys.maxsize    # index    l = 0    r = n-1 &