在Python中计数漂亮子数组的程序
假设我们有一个名为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] mod 2 等于 1,则
- 在odd_i的末尾插入i
- 如果 nums[i] mod 2 等于 1,则
- start := 0, end := k – 1
-
i := 0
-
count := 0
-
当end <奇数_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] + 1
-
start := start + 1
-
end := end + 1
- 如果end与odd_i的大小-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,2,3,4,5,6,7,8]
输出
2