ধরুন আমাদের nums নামে একটি অ্যারে আছে এবং আরেকটি মান k। আমাদের চমৎকার সাব-অ্যারের সংখ্যা খুঁজে বের করতে হবে। একটি সাবঅ্যারেকে চমৎকার সাবঅ্যারে বলা হয় যদি এতে k বিজোড় সংখ্যা থাকে।
সুতরাং, ইনপুট যদি nums =[1,1,2,1,1], k =3 এর মত হয়, তাহলে আউটপুট হবে 2 কারণ দুটি সাবয়ারে [1,1,2,1] এবং [1,2] ,1,1]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
odd_i :=একটি নতুন তালিকা
-
আমি 0 থেকে সংখ্যার আকার - 1 এর মধ্যে, কর
-
যদি nums[i] mod 2 1 এর মত হয়, তাহলে
-
odd_i
এর শেষে i ঢোকান
-
-
-
শুরু :=0, শেষ :=k - 1
-
i :=0
-
গণনা :=0
-
শেষে
-
যদি প্রান্তটি odd_i - 1 এর আকারের সমান হয়, তাহলে
-
j :=সংখ্যার আকার - 1
-
-
অন্যথায়,
-
j :=odd_i[শেষ + 1] - 1
-
-
গণনা :=গণনা +(বিজোড়_i[শুরু] - i + 1) *(j - odd_i[শেষ] + 1)
-
i :=odd_i[start] + 1
-
start :=start + 1
-
end :=end + 1
-
-
ফেরত গণনা
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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,2,3,4,5,6,7,8]
আউটপুট
2