在Python中找到二进制列表中和为k的子列表数

在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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程