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

C ++のバイナリ循環配列の最大連続1(またはゼロ)


循環配列が与えられます。循環配列は、最初の要素が最後の要素の隣にある場合を考慮した配列です。キューを実装するために使用されます。したがって、最大数を数える必要があります。その配列内の連続する1または0の数。

例を挙げて理解しましょう。

入力 − arr [] ={1,1,0,1,0,1,0,1,1,1}

出力 −最大連続1は5です。または最大連続0は1です。

説明 − Arr []インデックス7から9まで、次にインデックス0と1。1は5です。連続する0はありませんが、1です。

入力 − arr [] ={0,0,0,1,0}

出力 −最大連続1は1です。または、連続する最大0は4です。

説明 − Arr []インデックス4から、インデックス0から3まで。0は4です。

以下のプログラムで使用されているアプローチは次のとおりです

  • 0と1をランダムな順序で含む入力Arr[]を取得します。

  • 変数Nは、Arr[]のサイズに使用されます。

  • ビットは、1または0を格納するために使用され、それに応じてカウントされます。

  • 関数maxConsecutive(int arr []、int n、int bit)は、3つの入力パラメーターを取ります。配列自体、そのサイズ、およびビットとしての0または1。過去のビット数を返します。

  • 配列を円形にします。 Temp [2 * n]は、arr[]を2回格納するために使用されます。 While()ループが2回実行され、arr[]がtempにコピーされます。

  • 次に、while(temp [k ++] ==bit)を使用して連続する1(または0)をカウントし、連続するカウントを変数「count」に格納します。

  • このカウントがこれまでに見つかった最大数である場合は、maxCに保存します。

  • 最終結果としてmaxCを返します。

#include <iostream>
//to return maximum bishops possible
int maxConsecutive(int arr[],int n,int bit){
   int count=0;
   int temp[2*n]={0};
   int maxC=0;
   int j=0,k=0; //to twice copy arr[]
   while(j<2){
      for(int i=0;i<n;i++){
         temp[k++]=arr[i];
      }
      j++;
   }
   k=0;
   for(int i=0;i<2*n; i++){
      count=0;
      while(temp[k++]==bit){
         ++count;
      }
      if(maxC<count)
         maxC=count;
   }
   return maxC;
}
int main(){
   int Arr[]={1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1 };
   int N = 12;
   int bit=1;
   printf("Maximum Consecutive 1's in circular array: %d",maxConsecutive(Arr,N,bit));
   bit=0;
   printf("\nMaximum Consecutive 0's in circular array: %d",maxConsecutive(Arr,N,bit));
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Maximum Consecutive 1's in circular array: 6
Maximum Consecutive 0's in circular array: 2

  1. C++での二分木の最大幅

    二分木があるとすると、与えられた木の最大幅を取得する関数を定義する必要があります。ここで、木の幅はすべてのレベルの中で最大の幅です。二分木は完全な二分木と同じ構造であると考えますが、一部のノードはnullです。 1つのレベルの幅は、実際にはエンドノード間の長さです(レベル内の左端と右端の非ヌルノード。エンドノード間のヌルノードも長さの計算にカウントされます)。したがって、ツリーが次のような場合- 最後のレイヤーのノードは[5,3、null、9] であるため、最大幅は4です。 これを解決するには、次の手順に従います- ans:=1、サイズ:=0 (ノード、値)ペアを

  2. C++での最大二分木

    整数配列があるとします。その配列内のすべての要素は一意です。この配列での最大ツリー構築は、次のように定義されます- ルートは配列内の最大数を保持します。 左側のサブツリーは、サブアレイの左側を最大数で割って構築された最大ツリーです。 右側のサブツリーは、サブアレイの右側を最大数で割って構築された最大ツリーです。 最大の二分木を構築する必要があります。したがって、入力が[3,2,1,6,0,5]の場合、出力は-になります。 これを解決するには、次の手順に従います- Solve()というメソッドを定義します。これにより、リストと左右の値が取得されます。関