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

C++のサブ配列の「max+min」の最小値


問題の説明

n個の正の要素の配列が与えられた場合、サブ配列のサイズが2以上でなければならないことを前提として、サブ配列内の最大要素と最小要素の可能な最小の合計を見つける必要があります。

arr [] ={10、5、15、7、2、1、3}の場合、「2 + 1」を加算すると、「最大+最小」の合計は3になります。

アルゴリズム

  • サブアレイに要素を追加しても、最大値と最小値の合計は増えません。
  • 配列に要素を追加しても、配列の最大値が減少することはありません。より大きな要素を追加した場合にのみ増加します。したがって、長さが2のサブアレイのみを考慮することが常に最適です。
  • したがって、長さ2のすべてのサブ配列を検討し、合計を比較して最小のものを取得します。

#include <bits/stdc++.h>
using namespace std;
int getMaxSum(int *arr, int n) {
   if (n < 2) {
      return -1;
   }
   int result = arr[0] + arr[1];
   for (int i = 1; i + 1 < n; ++i) {
      result = min(result, (arr[i] + arr[i + 1]));
   }
   return result;
}
int main() {
   int arr[] = {10, 5, 15, 7, 2, 1, 3};
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << "Maximum sum = " << getMaxSum(arr, n) << endl;
   return 0;
}

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

出力

Maximum sum = 3

  1. C++の最小ヒープの値x未満のすべてのノードを出力します

    この問題では、最小ヒープが与えられます および値x x未満のすべてのノードを印刷する必要があります。 最小ヒープ は、すべてのノードの値が子ノードのノード値よりも小さい特殊なタイプの二分木です。 問題を理解するために例を見てみましょう- X =45 出力- 2 4 7 10 17 22 33 34 ここで、この問題を解決するには、最小ヒープ全体のプレオーダートラバーサルを実行し、指定された値X未満の値のみを出力する必要があります。ノードの値がxより大きい場合、トラバースは行われません。そこの子ノードの値はxより大きくなります。最小ヒープのプレオーダートラバーサルを実行す

  2. C++の最大ヒープの最小要素。

    問題の説明 最大ヒープの値が最小の要素を見つけます。 最大ヒープ以下を考えてみましょう。 ルートノードの最大ヒープ値は、常にその子ノードよりも大きくなります。このプロパティにより、値はリーフノードの1つに存在すると結論付けることができます。ヒープにn個のノードが含まれている場合、ceil(n / 2)リーフがあります。 最大ヒープは完全なバイナリツリーであるため、配列で表すことができます。このようなヒープでは、最初のリーフはfloor(n / 2)インデックスの後に存在します。したがって、この例では、最初の休暇はインデックス5に存在します。 アルゴリズム 以下のアルゴリズムを使