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

กำหนดอาร์เรย์ที่เรียงเป็น 0 และ 1 ให้ค้นหาจุดเปลี่ยนของอาร์เรย์ใน C++


กำหนดอาร์เรย์ของตัวเลขที่จัดเรียงโดยมีเพียง 0 และ 1 เท่านั้น ให้ค้นหาจุดเปลี่ยน จุดเปลี่ยนคือดัชนีของ '1' แรกที่ปรากฏในอาร์เรย์ ตัวอย่างเช่น

อินพุต-1

N = 6
arr[ ] = {0,0,0,0,1,1}

ผลผลิต

4

คำอธิบาย − เนื่องจากในอาร์เรย์ที่กำหนดที่มี 0 และ 1 เราจะเห็นว่าองค์ประกอบที่ดัชนี '4' มีตัวเลข '1'

อินพุต-2

N = 5
arr[ ] = {0,0,1,1,1}

ผลผลิต

2

คำอธิบาย − ในอาร์เรย์ที่กำหนดที่มี 0 และ 1 เราจะเห็นว่าองค์ประกอบที่ดัชนี '2' มีตัวเลข '1' ดังนั้นเราจะคืน 2.

แนวทางในการแก้ปัญหานี้

ในอาร์เรย์ของจำนวนเต็มที่กำหนด เราต้องหาดัชนีของ 1 ตัวแรก เพื่อแก้ปัญหานี้ เราสามารถแก้ไขได้โดยใช้ Binary Search Method เพื่อค้นหาดัชนีของ '1' ตัวแรก

  • รับอินพุตอาร์เรย์ของ N Binary Numbers

  • ตอนนี้ฟังก์ชั่น TransitionPoint(int *arr, int n) รับอาร์เรย์เป็นอินพุตและขนาดและส่งคืนดัชนีของ '1' แรกที่ปรากฏในอาร์เรย์

  • ใช้ตัวชี้สองตัวต่ำ สูง ซึ่งเริ่มต้นเป็น '0' และ '1'

  • ตอนนี้เราจะหาจุดกึ่งกลางของอาร์เรย์และจะตรวจสอบว่าเป็น '1' หรือไม่

  • หากตรงกลางของอาร์เรย์คือ '1' เราจะส่งคืนดัชนีของอาร์เรย์ มิฉะนั้นเราจะตรวจสอบโดยดำเนินการต่อไป

  • เพิ่มตัวชี้ต่ำและตรวจสอบอีกครั้งสำหรับ '1'

  • ทำซ้ำขั้นตอนจนกว่าเราจะไม่ได้รับ '1'

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int transitionPoint(int *arr, int n){
   int low=0;
   int high= n-1;
   while(low<=high){
      int mid = (low+high)/2;
      if(arr[mid]==0)
         low= mid+1;
      else if(arr[mid]==1){
         if(mid==0 || (mid>0 && arr[mid-1]==0))
            return mid;
         high= mid-1;
      }
   }
   return -1;
}
int main(){
   int n= 6;
   int arr[n]= {0,0,0,1,1,1};
   int ans= transitionPoint(arr,n);
   if(ans>=0){
      cout<<"Transition Point is:"<<ans<<endl;
   }
   else{
      cout<<"Not Found"<<endl;
   }
   return 0;
}

ผลลัพธ์

การเรียกใช้โค้ดด้านบนจะสร้างผลลัพธ์เป็น

Transition Point is: 3

อาร์เรย์ที่กำหนด {0,0,0,1,1,1} มีองค์ประกอบ '1' อยู่ที่ดัชนี '3' ดังนั้นเราจึงได้ผลลัพธ์เป็น '3'