আমাদের একটি অ্যারে আছে যাকে nums বলা হয়েছে এবং অন্য একটি মান k। আমাদের নাইস সাব-অ্যারে সংখ্যা বের করতে হবে। একটি সাবঅ্যারে নাইস সাবঅ্যারে বলা হয় যদি সেটিতে ঠিক kটি বিজোড় সংখ্যা থাকে।
উদাহরণস্বরূপ, ইনপুট nums = [1,1,2,1,1], k = 3 হলে আউটপুট হবে 2 কারণ দুটি সাবঅ্যারে রয়েছে: [1,1,2,1] এবং [1,2,1,1]।
সমাধানের ধাপসমূহ
odd_i := একটি নতুন লিস্টi= 0 থেকেnums-এর আকার - 1 পর্যন্ত লুপ চালান:যদি
nums[i] % 2 == 1হয়, তবে:i-কেodd_i-এর শেষে যোগ করুন
start := 0, end := k - 1i := 0count := 0end < odd_i-এর আকার থাকাকালীন লুপ চালান:যদি
end == odd_i-এর আকার - 1 হয়, তবে:j := nums-এর আকার - 1
অন্যথায়:
j := odd_i[end + 1] - 1
count := count + (odd_i[start] - i + 1) * (j - odd_i[end] + 1)i := odd_i[start] + 1start := start + 1end := end + 1
countরিটার্ন করুন
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন ভালোভাবে বুঝার জন্য:
def solve(nums, k):
odd_i = []
for i in range(len(nums)):
if nums[i] % 2 == 1:
odd_i.append(i)
start = 0
end = k - 1
i = 0
count = 0
while end < len(odd_i):
if end == len(odd_i) - 1:
j = len(nums) - 1
else:
j = odd_i[end + 1] - 1
count = count + (odd_i[start] - i + 1) * (j - odd_i[end] + 1)
i = odd_i[start] + 1
start = start + 1
end = end + 1
return count
nums = [1,1,2,1,1]
k = 3
print(solve(nums, k)) ইনপুট
[1,1,2,1,1], 3
আউটপুট
2