程序计算通过在 Python 中行走 k 次覆盖了多少块

假设我们有两个名为 walks 和 target 的列表。一开始,我们在一维线上的位置 0 处。现在|走[i]| 代表已经走过的步数。当 walk[i] 为正时,则表示向右行走,而负向则表示向左行走。当我们走路时,我们移动一个块,即下一个或前一个整数位置。我们必须找到至少经过目标次数的块数。

所以,如果输入像walks = [3, -7, 2] target = 2,那么输出就是5,从下图中我们可以看到[0, 1], [1, 2], [2 , 3], [-4, -3], [-3, -2] 被覆盖 k = 2 次。

示例

让我们看看以下实现以更好地理解 -

from collections import defaultdict
def solve(walks, target):
   pos = 0
   jumps = defaultdict(int)
   for dist in walks:
      jumps[pos] += 1 if dist > 0 else -1
      jumps[pos + dist] -= 1 if dist > 0 else -1
      pos += dist
   lastpos = level = total = 0
   for pos, val in sorted(jumps.items()):
      if level >= target:
         total += pos - lastpos
      level += val
      lastpos = pos
   return total

walks = [3, -7, 2]
target = 2
print(solve(walks, target))

输入

[3, -7, 2], 2
输出结果
5