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

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

  1. 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 &amp;&amp; j < two.Length &amp;&amp; k < three

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