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

C++で配列の中央値を最大化する


問題の説明

N個の要素の配列arr[]とK

入力配列が{1、3、2、5}でk =3の場合、-

  • ソートされた配列は{1、2、3、5}になります
  • 5より大きい3つの要素を挿入します。この操作の後、配列は{1、2、3、5、6、6、6}になります。
  • 新しいアレイの中央値は5です

アルゴリズム

1. In order to maximize the median of the resultant array, all the elements that need to be inserted must be greater than the maximum element from the array
2. Sort the array and the median of the array will be arr[size / 2] if the size is odd else (arr[(size / 2) – 1] + arr[size / 2]) / 2

#include <bits/stdc++.h>
using namespace std;
double getMaxMedian(int *arr, int n, int k){
   int newSize = n + k;
   double median;
   sort(arr, arr + n);
   if (newSize % 2 == 0) {
      median = (arr[(newSize / 2) - 1] + arr[newSize / 2]) / 2;
      return median;
   }
   median = arr[newSize / 2];
   return median;
}
int main(){
   int arr[] = {1, 3, 2, 5};
   int n = sizeof(arr) / sizeof(arr[0]);
   int k = 3;
   cout << "Max median = " << getMaxMedian(arr, n, k) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Max median = 5

  1. C ++で配列のプレフィックスに-1を掛けて、配列の合計を最大化します。

    整数配列が与えられ、タスクは最初に配列のプレフィックスをフェッチし、次にそれを-1で乗算し、次にアレイのプレフィックス合計を計算し、最後に生成されたプレフィックス配列から最大合計を見つけることです。 プレフィックス配列は-として生成されます prefixArray[0]の最初の要素=配列の最初の要素 prefixArray[1]の2番目の要素=prefixArray[0] + arr [1] prefixArray[2]の3番目の要素=prefixArray[1] + arr [2] prefixArray[3]の4番目の要素=prefixArray[2] +arr[3]…..et

  2. C++の迷路

    空のスペースと壁のある迷路の中にボールがあるとします。これで、ボールは上、下、左、右などの任意の方向に転がることで空のパスを通過できますが、壁にぶつかるまで転がりが止まりません。ボールが止まると、次の方向を選択できます。 ボールの位置、目的地、迷路を開始し、ボールが目的地に止まるかどうかを確認する必要があります。迷路は1つの2D配列で表されます。ここで、1は壁を示し、0は空きスペースを示します。迷路の境界はすべて壁です。開始座標と宛先座標は、行と列のインデックスで表されます。 したがって、入力が2D配列で表される迷路のようなものである場合 0 0 1 0 0