ধরা যাক একটি বাইনারি অ্যারে আছে। আমাদের এমন একটি 0 এর পজিশন বের করতে হবে যেটিকে 1 দিয়ে রিপ্লেস করলে ১-র সর্বোচ্চ দীর্ঘ সতত সিকোয়েন্স পাওয়া যাবে।
ইনপুট: [1,1,0,0,1,0,1,1,1,1,0,1,1] → আউটপুট 10 (সেরি হবে [1,1,0,0,1,0,1,1,1,1,1,1,1])।
সমাধানের ধাপসমূহ
- i=0, n=len(A), count_left=0, count_right=0, max_i=-1, last_i=-1, count_max=0
- while i < n:
- যদি A[i]==1: count_right++
- অন্যথায়:
- যদি last_i != -1 এবং count_right+count_left+1 > count_max: count_max আপডেট, max_i=last_i
- last_i=i; count_left=count_right; count_right=0
- i++
- লুপ শেষে last_i চেক করে ফাইনাল আপডেট
- return max_i
উদাহরণ
def find_max_one_index(A):
i = 0; n = len(A)
count_left = 0; count_right = 0
max_i = -1; last_i = -1; count_max = 0
while i < n:
if A[i] == 1:
count_right += 1
else:
if last_i != -1:
if count_right + count_left + 1 > count_max:
count_max = count_left + count_right + 1
max_i = last_i
last_i = i
count_left = count_right
count_right = 0
i += 1
if last_i != -1:
if count_left + count_right + 1 > count_max:
count_max = count_left + count_right + 1
max_i = last_i
return max_i
A = [1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]
print(find_max_one_index(A))
ইনপুট
[1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1]
আউটপুট
10