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
广告