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

C ++でソートされた3つの異なる配列の(max(A [i]、B [j]、C [k])– min(A [i]、B [j]、C [k]))を最小化します。


コンセプト

必ずしも同じサイズではない、与えられた3つのソートされた配列A、B、およびCに関して、最小値、つまり、任意のトリプレットA [i]、B [j]、C[k]の最大数と最小数の間の最小絶対差を計算します。それらがそれぞれ配列A、B、Cの下にあること、つまり、最小化(max(A [i]、B [j]、C [k])– min(A [i]、B [j]、C [k] ))。

入力

A : [ 2, 5, 6, 9, 11 ]
B : [ 7, 10, 16 ]
C : [ 3, 4, 7, 7 ]

出力

1

説明

A [i] =6、B [j] =7、C [k] =7を選択すると、max(A [i]、B [j]、C [k])-min( A [i]、B [j]、C [k]))=| 7-6 | =1

入力

A = [ 6, 9, 11, 16 ]
B = [ 7, 10, 16, 79, 90 ]
C = [ 3, 4, 7, 7, 9, 9, 11 ]

出力

1

説明

A [i] =11、b [j] =10、C [k] =11を選択すると、最小差はmax(A [i]、B [j]、C [k])-min( A [i]、B [j]、C [k]))=| 11-10 | =1

メソッド

配列A、B、Cのそれぞれで最も高い要素から始めます。変数を追跡して、実行する各ステップの時点で回答を更新します。

すべてのステップに関して、違いを減らす唯一の可能な方法は、3つの要素のうち最大の要素を減らすことです。

この結果、このステップの最大要素を含む配列内で次に高い要素にアクセスし、回答変数を更新します。

最大要素を含む配列が終了するまで、この手順を繰り返す必要があります。

例(C ++)

//上記のアプローチのC++コード

#include<bits/stdc++.h>
usingnamespacestd;
intsolve(intA1[], intB1[], intC1[], inti1, intj1, intk1) {
intmin_diff, current_diff, max_term;
// calculating min difference from last
// index of lists
min_diff = abs(max(A1[i1], max(B1[j1], C1[k1]))
- min(A1[i1], min(B1[j1], C1[k1])));
while(i1 != -1 && j1 != -1 && k1 != -1) {
   current_diff = abs(max(A1[i1], max(B1[j1], C1[k1]))
   - min(A1[i1], min(B1[j1], C1[k1])));
   // checking condition
   if(current_diff < min_diff)
      min_diff = current_diff;
      // calculating max term from list
      max_term = max(A1[i1], max(B1[j1], C1[k1]));
      if(A1[i1] == max_term)
         i1 -= 1;
      elseif(B1[j1] == max_term)
         j1 -= 1;
      else
         k1 -= 1;
   }
   returnmin_diff;
}
intmain() {
   intD1[] = { 5, 8, 10, 15 };
   intE1[] = { 6, 9, 15, 78, 89 };
   intF1[] = { 2, 3, 6, 6, 8, 8, 10 };
   intnD = sizeof(D1) / sizeof(D1[0]);
   intnE = sizeof(E1) / sizeof(E1[0]);
   intnF = sizeof(F1) / sizeof(F1[0]);
   cout << solve(D1, E1, F1, nD-1, nE-1, nF-1);
   return0;
}

出力

1

  1. 2つの異なる配列の要素をC++の3番目の配列に交互にマージします。

    問題の説明 2つの配列がある場合、結合された配列が1番目と2番目の配列の代替要素を持つように2つの配列を結合する必要があります。配列の1つに追加の要素がある場合、これらの要素は結合された配列の最後に追加する必要があります。 arr1[] = {10, 20, 30, 40} arr2[] = {-10, -20, -30, -40} result[] = {10, -10, 20, -20, 30, -30, 40, -40} アルゴリズム 1. Traverse both arrays and one by one put elements into result array. 2. If

  2. Pythonでソートされた3つの異なる配列の(max(A [i]、B [j]、C [k])– min(A [i]、B [j]、C [k]))を最小化します

    3つのソートされた配列A、B、およびC(これらは異なるサイズにすることができます)があるとすると、任意のトリプレットの最大数と最小数の間の最小絶対差を計算する必要があります(A [i]、B [j]、 C [k])それぞれ配列A、B、Cの下にあるように したがって、入力がA:[2、5、6、9、11]、B:[7、10、16]、C:[3、4、7、7]のようである場合、出力は次のように1になります。 A [i] =6 B [j]=7およびC[k]=7を選択すると、max(A [i]、B [j]、C [k])-min(A [i]、B [j]、C [k]))=| 7-6 | =1 これを解決するには