এই সমস্যায়, আমাদেরকে সাজানো ক্রমে বুলিয়ান মান (শুধুমাত্র 0 এবং 1'স) সমন্বিত একটি অ্যারে বিন [] দেওয়া হয়েছে। আমাদের কাজ হল 0 এবং 1 এর সাজানো অ্যারেতে প্রথম 1 এর সূচী খুঁজে বের করা .
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
Input : bin[] = {0, 0, 0, 1, 1}
Output : 3 ব্যাখ্যা −
First 1 of the binary array is encountered at index 3.
সমাধান পদ্ধতি
সমস্যা সমাধানের জন্য, আমাদের মূলত অ্যারেতে 1ম 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