Mô tả bài toán
Cho một mảng nums và một giá trị k. Một mảng con được gọi là "đẹp" nếu nó chứa đúng k số lẻ. Hãy tìm số lượng mảng con đẹp.
Ví dụ
Nếu đầu vào là nums = [1,1,2,1,1], k = 3, thì đầu ra sẽ là 2 vì có hai mảng con đẹp: [1,1,2,1] và [1,2,1,1].
Giải thuật
- Tạo danh sách
odd_ilưu chỉ số của các phần tử lẻ trongnums. - Khởi tạo
start = 0,end = k - 1,i = 0,count = 0. - Trong khi
end < len(odd_i):- Nếu
end == len(odd_i) - 1, gánj = len(nums) - 1; ngược lạij = odd_i[end + 1] - 1. - Cập nhật
count += (odd_i[start] - i + 1) * (j - odd_i[end] + 1). - Cập nhật
i = odd_i[start] + 1,start += 1,end += 1.
- Nếu
- Trả về
count.
Triển khai Python
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 += (odd_i[start] - i + 1) * (j - odd_i[end] + 1)
i = odd_i[start] + 1
start += 1
end += 1
return count
nums = [1, 1, 2, 1, 1]
k = 3
print(solve(nums, k))
Đầu vào
[1,1,2,1,1], 3
Đầu ra
2