একটি সংখ্যা তালিকা (nums) দেওয়া আছে। একটি ফাংশন f(i) ইনডেক্স i-এ থাকা উপাদানটি মুছে দিলে বাকি তালিকার ইভেন ইনডেক্সের যোগফল এবং অড ইনডেক্সের যোগফল সমান হলে true রিটার্ন করে। এমন কতগুলো ইনডেক্স আছে তা বের করতে হবে।
সমস্যা উদাহরণ
ইনপুট: nums = [6, 8, 5, 2, 3]
আউটপুট: 2
ব্যাখ্যা:
- ৮ মুছে দিলে:
[6, 5, 2, 3]→ ইভেন ইনডেক্স যোগফল = ৬+২=৮, অড ইনডেক্স যোগফল = ৫+৩=৮ - ২ মুছে দিলে:
[6, 8, 5, 3]→ ইভেন ইনডেক্স যোগফল = ৬+৫=১১, অড ইনডেক্স যোগফল = ৮+৩=১১
সমাধানের পদ্ধতি (প্রিফিক্স সাম ব্যবহার)
n := len(nums)- ২ × (n+1) আকারের ২D অ্যারে
aতৈরি করুন, সব শূন্য দিয়ে ভরুন - প্রতিটি ইনডেক্স i এবং মান x এর জন্য:
a[0][i+1] = a[0][i]a[1][i+1] = a[1][i]a[i%2][i+1] += x
c := 0,s := sum(nums)- প্রতিটি i (০ থেকে n-১) এর জন্য:
e = a[0][i] - a[0][0] + a[1][n] - a[1][i+1]- যদি
e * 2 == s - nums[i]হয়, তবেc += 1
cরিটার্ন করুন
পাইথন কোড
def solve(nums):
n = len(nums)
a = [[0] * (n + 1), [0] * (n + 1)]
for i, x in enumerate(nums):
a[0][i + 1] = a[0][i]
a[1][i + 1] = a[1][i]
a[i % 2][i + 1] += x
c = 0
s = sum(nums)
for i in range(n):
e = a[0][i] - a[0][0] + a[1][n] - a[1][i + 1]
if e * 2 == s - nums[i]:
c += 1
return c
nums = [6, 8, 5, 2, 3]
print(solve(nums)) # আউটপুট: 2
টেস্ট কেস
ইনপুট: [6, 8, 5, 2, 3]
আউটপুট: 2