n উপাদানের একটি সর্টেড অ্যারে দেওয়া আছে। আমাদের চেক করতে হবে কোনো উপাদান আছে কিনা যেটির বামপাশে ছোট উপাদানগুলো এবং ডানপাশে বড় উপাদানগুলোর সংখ্যা সমান। যদি সমান বিন্দু একাধিকবার আসে, তবে প্রথম বারের ইনডেক্স রিটার্ন করব। যদি না থাকে, তবে -1 রিটার্ন করব। উদাহরণস্বরূপ, A = [1, 1, 2, 3, 3, 3, 3, 3] হলে সমান বিন্দু ইনডেক্স ২-এ, উপাদান A[2] = 2। কারণ এর বামে শুধু ১ (একটি ছোট) এবং ডানে শুধু ৩ (একটি বড়)।
আমরা একটি অক্সিলিয়ারি (auxiliary) অ্যারে তৈরি করব যেটে সব ডিস্টিংক্ট (distinct) উপাদান রাখব। যদি ডিস্টিংক্ট উপাদানগুলোর সংখ্যা জোড় হয়, তবে কোনো সমান বিন্দু পাওয়া যাবে না, অন্যথায় মাঝপথের উপাদানটি হবে মিড-পয়েন্ট।
উদাহরণ
#include<iostream> using namespace std; int searchEqualPoint(int arr[], int n) { int aux_arr[n]; int i = 0, aux_index = 0; while (i < n) { aux_arr[aux_index++] = i++; while (i<n && arr[i] == arr[i-1]) i++; } return (aux_index & 1)? aux_arr[aux_index>>1] : -1; } int main() { int arr[] = {1, 1, 2, 3, 3, 3, 3, 3}; int n = sizeof(arr)/sizeof(arr[0]); int index = searchEqualPoint(arr, n); if (index != -1) cout << "Equal Point is: " << arr[index]; else cout << "No Equal Point exists"; }আউটপুট
Equal Point is: 2