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 次查看

开始您的职业生涯

完成课程获得认证

开始
广告