Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ค่าสูงสุดที่ต่อเนื่องกัน (หรือศูนย์) ในอาร์เรย์วงกลมแบบไบนารีใน 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[].

  • 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