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[左]+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]
-
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つのソートされた配列から最も近いペアを見つけるための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 &