C++で指定された3つのソートされた配列から最も近い3つの要素を検索します
max(| A [i] – B [i] |、| B [j] – Cのように、3つのソートされた配列A、B、Cと、それぞれA、B、Cからの3つの要素i、j、kがあるとします。 [k] |、| C [k] – A [i] |)が最小化されます。したがって、A =[1、4、10]、B =[2、15、20]、およびC =[10、12]の場合、出力要素は10、15、10、これら3つはA、B、およびCからのものです。
A、B、Cのサイズがそれぞれp、q、rであるとします。次に、次の手順に従ってこれを解決します-
- i:=0、j:=0およびk:=0
- ここで、i
の間に次のことを行います。
- A [i]、B [j]、C[k]の最小値と最大値を見つける
- diffを計算します:=max(X、Y、Z)-min(A [i]、B [j]、C [k])
- 結果が現在の結果よりも小さい場合は、新しい結果に変更します
- 最小値を含む配列のポインタをインクリメントします。
例
#include <iostream> using namespace std; void getClosestElements(int A[], int B[], int C[], int p, int q, int r) { int diff = INT_MAX; int i_final =0, j_final = 0, k_final = 0; int i=0,j=0,k=0; while (i < p && j < q && k < r) { int min_element = min(A[i], min(B[j], C[k])); int max_element = max(A[i], max(B[j], C[k])); if (max_element-min_element < diff){ i_final = i, j_final = j, k_final = k; diff = max_element - min_element; } if (diff == 0) break; if (A[i] == min_element) i++; else if (B[j] == min_element) j++; else k++; } cout << A[i_final] << " " << B[j_final] << " " << C[k_final]; } int main() { int A[] = {1, 4, 10}; int B[] = {2, 15, 20}; int C[] = {10, 12}; int p = sizeof A / sizeof A[0]; int q = sizeof B / sizeof B[0]; int r = sizeof C / sizeof C[0]; cout << "Closest elements are: "; getClosestElements(A, B, C, p, q, r); }
出力
Closest elements are: 10 15 10
-
3つのソートされた配列で共通の要素を見つけるC#プログラム
まず、3つのソートされた配列を初期化します- int []one = {20, 35, 57, 70}; int []two = {9, 35, 57, 70, 92}; int []three = {25, 35, 55, 57, 67, 70}; 3種類の配列で共通の要素を見つけるには、whileループを使用して配列を反復処理し、最初の配列を2番目の配列で確認し、2番目の配列を3番目の配列で確認します- while (i < one.Length && j < two.Length && k < three
-
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