সমস্যা বিবরণ
একটি অ্যারে arr[] (সাইজ N) দেওয়া আছে। দুটি পয়েন্টার: বাম (ইনডেক্স ০ থেকে শুরু, যোগফল বেড়ায়) এবং ডান (ইনডেক্স N-1 থেকে শুরু, যোগফল বেড়ায়)। যেটির যোগফল কম সেটি আগায় বেড়ায়। দুটি পয়েন্টার মেলা পর্যন্ত চলে। বাম পয়েন্টারের চূড়ান্ত ইনডেক্স বের করা।
উদাহরণ
ইনপুট: {5,6,3,7,9,4}
আউটপুট: 2
ব্যাখ্যা: বাম পয়েন্টার ইনডেক্স ২-এ রুকে।
সমাধানের পদ্ধতি
দুটি পয়েন্টার ও তাদের যোগফল মেইনটেইন করে হয়স بينما লুপ চালানো।
প্রোগ্রাম উদাহরণ
#include <iostream>
using namespace std;
int findLeftPointerIdx(int arr[], int n) {
if(n==1) return 0;
int l=0, r=n-1, sumL=arr[0], sumR=arr[n-1];
while(r > l+1){
if(sumL < sumR){ l++; sumL+=arr[l]; }
else if(sumL > sumR){ r--; sumR+=arr[r]; }
else break;
}
return l;
}
int main() {
int arr[]={5,6,3,7,9,4};
cout << findLeftPointerIdx(arr,6); // 2
return 0;
}
আউটপুট
2