在Python中找到二进制列表中和为k的子列表数
假设我们有一个只有0或1的二进制列表。我们还有另一个名为k的输入,我们必须找到子列表的数量,其总和与k相同。
因此,如果输入为nums = [1, 0, 0, 1, 1, 1, 0, 1] k = 3,则输出将为8,因为子列表为[1,0,0,1,1],[0,0,1,1,1],[0,0, 1,1,1,0],[0,1,1,1],[0,1,1,1,0],[1,1,1],[1,1,1,0] [1,1,0,1]。
要解决这个问题,我们将按照以下步骤进行 –
- sums:映射,初始包含键0的值为1
- r_sum:0
- ans:0
- 对于nums中的每个x,执行以下操作 –
- r_sum:r_sum + x
- ans:ans +(如果(r_sum-k)存在,则为sums [r_sum-k],否则为0)
- sums [r_sum]:1 +(如果(r_sum-k)存在,则为sums [r_sum-k],否则为0)
- 返回ans
示例
让我们看以下实现以更好地理解-
def solve(nums, k):
sums = {0:1}
r_sum = 0
ans = 0
for x in nums:
r_sum + = x
ans + = sums.get(r_sum-k, 0)
sums [r_sum] = sums.get(r_sum, 0)+1
return ans
nums =[1,0,0,1,1,1,0,1]
k = 3
print(solve(nums, k))
输入
[1, 0, 0, 1, 1, 1, 0, 1],3
输出
8