在Python中查找跑酷艺术家可以到达的最远建筑的程序

在Python中查找跑酷艺术家可以到达的最远建筑的程序

假设有n栋不同高度的房屋,跑酷艺术家想借助一些砖块和梯子从一栋房子到另一栋房子。房屋的高度是以数组的形式给出的。每个砖块高1个单位长度,我们有一些砖块。我们只能使用一次梯子和砖块。我们必须找出跑酷艺术家可以到达的最远的建筑物。

因此,如果输入如高度=[5, 8, 7, 6, 2, 3, 1, 4],砖块=3,梯子=2,则输出将为7。

艺术家从建筑物0开始。

他使用3块砖到达建筑物1。

他跳到建筑物2、3、4,因为继任建筑物比前任建筑物矮。

他使用梯子从建筑物4到建筑物5。

他跳过建筑物5到建筑物6,因为建筑物6更矮。

他使用最后一张梯子到达建筑物7。

要解决这个问题,我们将遵循以下步骤−

  • temp := 新堆

  • 对于i从1到高度大小,执行以下操作

    • dist := heights [i] – heights [i-1]

    • 如果dist> 0,则

      • 砖块:=砖块-dist

      • 将值-dist推送到堆temp中

      • 如果砖块<0,则

      • 梯子:=梯子-1

      • 砖块:=砖块-从堆temp中删除的最小元素

      • 如果砖块<0或梯子<0,则

        • 返回i-1
  • 返回高度大小-1

例子

让我们看一下以下实现以更好的理解−

from heapq import heappush, heappop
def solve(heights, bricks, ladders):
   temp = []
   for i in range(1, len(heights)):
      dist = heights[i] - heights[i - 1]
      if dist > 0:
         bricks -= dist
         heappush(temp, -dist)
         if bricks < 0:
            ladders -= 1
            bricks -= heappop(temp)
            if bricks < 0 or ladders < 0:
               return i - 1
   return len(heights) - 1

print(solve([5, 8, 7, 6, 2, 3, 1, 4], 3, 2))

输入

[5, 8, 7, 6, 2, 3,1, 4], 3, 2

输出

7

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程