원형 배열이 제공됩니다. 원형 배열은 첫 번째 요소가 마지막 요소 옆에 오는 경우를 고려하는 배열입니다. 큐를 구현하는 데 사용됩니다. 그래서 우리는 최대 수를 계산해야합니다. 해당 배열의 연속 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입니다.
아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.
-
무작위 순서로 0과 1을 포함하는 Arr[] 입력을 받습니다.
-
변수 N은 Arr[]의 크기에 사용됩니다.
-
비트는 1 또는 0을 저장하는 데 사용되며 이에 따라 계산됩니다.
-
maxConsecutive(int arr[], int n, int bit) 함수는 세 개의 입력 매개변수를 취합니다. 배열 자체, 크기 및 0 또는 1을 비트로 표시합니다. 지난 비트 수를 반환합니다.
-
배열을 원형으로 만들기 위해. Temp[2*n]은 arr[]을 두 번 저장하는 데 사용됩니다. while() 루프가 두 번 실행되어 r[]을 임시로 복사합니다.
-
이제 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