মান লিজিয়ে একটি অ্যারে আছে nums। আমরা ঠিক একটি ইন্ডেক্স বাছাই করে সেখান থেকে এলিমেন্ট মুছে দিতে পারি। (ইন্ডেক্সগুলো মুছে দিলে পরিবর্তিত হতে পারে)। একটি অ্যারে fair বলা হয় যখন অড ইন্ডেক্সের সম ও ইভেন ইন্ডেক্সের সম সমান হয়। আমরা কতগুলো ইন্ডেক্স বাছাই করতে পারি যাতে মুছে দিলে nums ফেয়ার হয় সেটি বের করতে হবে।
যেমন, ইনপুট হলে nums = [5,3,7,2], তবে আউটপুট হবে:
ইন্ডেক্স ০ মুছলে:
[3,7,2], ইভেন সম: ৩+২=৫, অড সম: ৭ (ফেয়ার নয়)ইন্ডেক্স ১ মুছলে:
[5,7,2], ইভেন সম: ৫+২=৭, অড সম: ৭ (ফেয়ার)ইন্ডেক্স ২ মুছলে:
[5,3,2], ইভেন সম: ৫+২=৭, অড সম: ৩ (ফেয়ার নয়)ইন্ডেক্স ৩ মুছলে:
[5,3,7], ইভেন সম: ৫+৭=১২, অড সম: ৩ (ফেয়ার নয়)
সমাধানের ধাপসমূহ
res := 0, sm1 := 0, sm2 := 0i = 1থেকেlen(nums)-1পর্যন্ত: যদিi%2==1হয়sm1 += nums[i]অন্যথায়sm2 += nums[i]যদি
sm1 == sm2হয়, তবেres += 1i = 1থেকেlen(nums)-1পর্যন্ত:যদি
i%2==1হয়:sm1 = sm1 - nums[i] + nums[i-1]অন্যথায়:
sm2 = sm2 - nums[i] + nums[i-1]যদি
sm1 == sm2হয়, তবেres += 1
resরিটার্ন করুন।
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
def solve(nums):
res, sm1, sm2 = 0, 0, 0
for i in range(1, len(nums)):
if i % 2 == 1:
sm1 += nums[i]
else:
sm2 += nums[i]
if sm1 == sm2:
res += 1
for i in range(1, len(nums)):
if i % 2 == 1:
sm1 = sm1 - nums[i] + nums[i-1]
else:
sm2 = sm2 - nums[i] + nums[i-1]
if sm1 == sm2:
res += 1
return res
nums = [5,3,7,2]
print(solve(nums))ইনপুট
[5,3,7,2]
আউটপুট
1