用 Python 找出跑酷艺术家可以到达的最远建筑物的程序

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

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

艺术家从建造 0 开始。

他在 3 块砖的帮助下到达了 1 号楼。

他跳到了 2、3、4 号楼,因为后继的建筑比之前的要短。

他用梯子从4号楼到5号楼。

他从 5 号楼跳到 6 号楼,因为 6 号楼更短。

他使用最后一个梯子到达7号楼。

示例

让我们看看以下实现以获得更好的理解 -

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

猜你喜欢