เราได้รับด้วยอาร์เรย์แบบวงกลม อาร์เรย์แบบวงกลมคืออาร์เรย์ที่เราพิจารณากรณีที่องค์ประกอบแรกอยู่ถัดจากองค์ประกอบสุดท้าย มันถูกใช้เพื่อดำเนินการคิว ดังนั้นเราต้องนับจำนวนสูงสุด ของ 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 เป็นบิต ส่งกลับจำนวนบิตที่ผ่านมา
-
เพื่อให้อาร์เรย์เป็นวงกลม Temp[2*n] ใช้เพื่อเก็บ arr[] สองครั้งในนั้น while() วนซ้ำสองครั้งเพื่อคัดลอก arr[] ลงใน temp.
-
ตอนนี้เราจะนับ 1 ติดต่อกัน ( หรือ 0 ) โดยใช้ while ( temp[k++]==bit ) และเก็บการนับต่อเนื่องในตัวแปร 'นับ'
-
หากพบจำนวนนี้สูงสุด ให้เก็บไว้ใน 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