C++中二進位制環形陣列中最大連續1(或0)


我們得到一個環形陣列。環形陣列是指將第一個元素視為緊跟最後一個元素之後的陣列。它用於實現佇列。因此,我們必須計算該陣列中最大數量的連續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。

下面程式中使用的方法如下

  • 我們接收一個輸入Arr[],其中包含隨機順序的0和1。

  • 變數N用於Arr[]的大小。

  • Bit用於儲存1或0,根據它我們將進行計數。

  • 函式maxConsecutive(int arr[], int n, int bit) 接收三個輸入引數。陣列本身、其大小和0或1作為bit。返回過去的bit計數。

  • 為了使陣列成為環形陣列。Temp[2*n]用於在其記憶體儲兩次arr[]。While()迴圈執行兩次以將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

更新於:2020年8月17日

610 次檢視

開始您的職業生涯

完成課程獲得認證

開始
廣告