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(intarr[],intn,intbit)具有三个输入参数。数组本身,其大小和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