在Python中编写一个计算走过k次的块数的程序

在Python中编写一个计算走过k次的块数的程序

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

因此,如果输入如下:walks = [3,-7,2] target = 2,则输出将是5。从下面的图中,我们可以看到[0,1][1,2][2,3][-4,-3][-3,-2]均被走过了2次。

在Python中编写一个计算走过k次的块数的程序

为了解决这个问题,我们将采取以下步骤-

  • pos:= 0
  • jumps:=哈希图中的默认值为0
  • 对于走过的每个距离,执行以下操作:
    • 如果距离“> 0”,则 jumps [pos]:= jumps [pos] +1,否则始终减去1
    • 如果距离“> 0”,则 jumps [pos + dist]:= jumps [pos + dist] -1,否则始终减去1
    • pos:= pos + dist
  • lastpos:= 0
  • level:= 0
  • total:= 0
  • 对于跳跃的排序的键值对中的每个位置pos和值val,执行以下操作:
    • 如果级别≥目标,则
      • total:=total + pos-lastpos
    • 级别:=level + val
    • lastpos:= pos
  • 返回总数

示例

请参阅以下实现,以获得更好的理解−

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程