ในปัญหานี้ เราได้รับอาร์เรย์ bin[] ที่ประกอบด้วยค่าบูลีน (เฉพาะ 0 และ 1) ตามลำดับ งานของเราคือ ค้นหาดัชนีของ 1 ตัวแรกในอาร์เรย์ที่เรียงลำดับของ 0 และ 1 .
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
Input : bin[] = {0, 0, 0, 1, 1} Output : 3
คำอธิบาย −
First 1 of the binary array is encountered at index 3.
แนวทางการแก้ปัญหา
ในการแก้ปัญหานั้น โดยพื้นฐานแล้ว เราจำเป็นต้องค้นหาดัชนีที่ 1 ในอาร์เรย์ เพื่อที่เราจะสามารถใช้เทคนิคการค้นหาได้
วิธีหนึ่งสามารถใช้การค้นหาเชิงเส้นได้ เราจะสำรวจอาร์เรย์จากดัชนี 0 ไปยังจุดสิ้นสุดของอาร์เรย์ และคืนค่าดัชนีของ 1 ตัวแรกในอาร์เรย์ มิฉะนั้น พิมพ์ -1
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream> using namespace std; double find1stOneInArray(int bin[], int n) { for (int i = 0; i < n; i++) if (bin[i] == 1) return i; return -1; } int main() { int bin[] = { 0, 0, 0, 1, 1, 1 }; int n = sizeof(bin) / sizeof(bin[0]); cout<<"The index of 1st occurrence of 1 in array is "<<find1stOneInArray(bin,n); return 0; }
ผลลัพธ์
The index of 1st occurrence of 1 in array is 3
เทคนิคการค้นหาอื่น ที่สามารถใช้ได้คือการค้นหาแบบไบนารีเมื่อจัดเรียงอาร์เรย์
ตัวอย่าง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
#include <iostream> using namespace std; double find1stOneInArray(int bin[], int n) { int low = 0; int high = (n - 1); int mid; while (low <= high) { mid = (low + high) / 2; if (bin[mid] == 1 && (mid == 0 || bin[mid - 1] == 0)) return mid; else if (bin[mid] == 1) high = mid - 1; else low = mid + 1; } return -1; } int main() { int bin[] = { 0, 0, 0, 1, 1, 1, 1 }; int n = sizeof(bin) / sizeof(bin[0]); cout<<"The index of 1st occurrence of 1 in array is "<<find1stOneInArray(bin,n); return 0; }
ผลลัพธ์
The index of 1st occurrence of 1 in array is 3