Python程序:找出视野更好的建筑物


假设我们得到一个数组,其中包含不同建筑物的高度。这些建筑物位于一条线上,如果一座建筑物不被另一座更高的建筑物遮挡,则该建筑物视野更好。因此,提供包含高度的数组,我们必须找出那些没有其他更高建筑物遮挡视野的建筑物。返回满足条件的数组索引。

因此,如果输入类似于height = [5, 6, 8, 7],则输出将为[2, 3]。数组索引0和1中的建筑物被索引2处的建筑物遮挡。索引2和3处的建筑物没有被遮挡,因为位置2处较高的建筑物位于位置3处较低建筑物的后面。

为了解决这个问题,我们将遵循以下步骤:

  • res := 一个新的列表
  • h := 0
  • 对于范围(高度大小 - 1) 到 -1 的 i,递减 1,执行:
    • 如果heights[i] > h,则
      • 在res的末尾插入i
      • h := heights[i]
  • 返回列表res的反转

示例

让我们看看下面的实现以更好地理解:

def solve(heights):
   res, h = [], 0
   for i in range(len(heights) - 1, -1, -1):
      if heights[i] > h:
         res.append(i)
         h = heights[i]
   return res[::-1]

print(solve([5, 6, 8, 7]))

输入

[5, 6, 8, 7]

输出

[2, 3]

更新于:2021年10月7日

260 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告