用 Python 编写程序找出视野更好的建筑物

pythonserver side programmingprogramming更新于 2025/12/9 21:00:17

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

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

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

  • res := a new list
  • 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]

相关文章


有用资源