C ++中二进制循环数组中的最大连续一个(或零)

我们得到了一个圆形数组。圆形数组是我们考虑的第一个元素紧挨着最后一个元素的数组。它用于实现队列。因此,我们必须计算最大数量。该数组中连续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 []的大小。

  • 位用于存储1或0,我们将根据该值进行计数。

  • 函数maxConsecutive(int arr [],int n,int bit)具有三个输入参数。数组本身,其大小和0或1(按位)。返回过去的位数。

  • 使数组变为圆形。Temp [2 * n]用于在其中存储两次arr []。While()循环运行两次以将arr []复制到temp。

  • 现在,我们将使用while(temp [k ++] == bit)对连续的1(或0)进行计数,并将连续的计数存储在变量'count'中。

  • 如果此计数是目前为止找到的最大计数,请将其存储在maxC中。

  • 返回maxC作为最终结果。

示例

#include <iostream>
//返回最大的主教可能
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
猜你喜欢