在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