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

C ++のバイナリ配列で1の最長の連続シーケンスを取得するには、インデックス0を1に置き換えます。


N個の要素の配列があるとします。これらの要素は0または1のいずれかです。1に置き換えられる0の位置を見つけて、1の最長の連続シーケンスを取得します。配列がarr=[1、1、0、0、1、0、1、1、1、0、1、1、1]のようであるとすると、出力インデックスは9です。インデックス9で0を1に置き換えると、 1の最大連続シーケンス

3つのインデックスを追跡する必要があります。現在のインデックス(curr)、前のゼロインデックス(pz)、および前のゼロインデックス(ppz)。次に、配列要素が0のときに配列をトラバースし、currとppzの差を計算します。差がmaxより大きい場合は、最大値を更新し、最後にprev_zeroのインデックスを最大の差で返します。

#include<iostream>
using namespace std;
int findIndex(bool arr[], int n) {
   int count_max = 0;
   int index;
   int pz = -1;
   int ppz = -1;
   for (int curr=0; curr<n; curr++) {
      if (arr[curr] == 0) {
         if (curr - ppz > count_max){
            count_max = curr - ppz;
            index = pz;
         }
         ppz = pz;
         pz = curr;
      }
   }
   if (n-ppz > count_max)
      index = pz;
   return index;
}
int main() {
   bool arr[] = {1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1};
   int n = sizeof(arr)/sizeof(arr[0]);
   cout << "Index of 0 to be replaced is "<< findIndex(arr, n);
}

出力

Index of 0 to be replaced is 9

  1. C++での二分木最長連続シーケンス

    二分木があるとしましょう。連続する最長のシーケンスパスの長さを見つけることができるかどうかを確認する必要があります。パスが、親子接続に沿ったツリー内の開始ノードから任意のノードまでのノードのシーケンスを参照している場合。最長の連続パスは、親から子をたどる必要がありますが、逆にする必要はありません。 したがって、入力が次のような場合、 最長の連続シーケンスパスは3-4-5であるため、出力は3になります。したがって、3を返します。 これを解決するには、次の手順に従います- 関数solveUtil()を定義します。これにより、ノード、prev、lenが1で初期化されます。 ノ

  2. C++で配列を実装した二分木

    二分木は、ツリーの各ノードが最大2つの子ノードを持つことができる特殊なタイプのツリーです。これらの子ノードは、右子および左子と呼ばれます。 単純な二分木は-です 木を表現するには、2つの方法があります。 リンクリストを使用する動的ノード表現 配列を使用する順次表現。 ここでは、二分木の配列表現について説明します。このために、BTのノードに番号を付ける必要があります。この番号付けは、0から(n-1)または1からnまで開始できます。 配列内のノードとその親ノードおよび子ノードの位置を導き出します。 0インデックスベースのシーケンスを使用する場合 親ノードがインデックスpであ