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