用 Python 编写程序,查找可以看到大海的建筑物

pythonserver side programmingprogramming更新于 2026/1/5 18:20:17

假设我们有一个不同建筑物高度的列表。当建筑物右侧的每座建筑物都比其矮时,其高度值为 heights[i] 的建筑物可以看到大海。我们必须按升序找到可以看到海洋的建筑物索引。

因此,如果输入为 heights = [8, 12, 12, 9, 10, 6],则输出将为 [2, 4, 5],因为我们可以从索引 2 处的建筑物高度 12、索引 10 处的建筑物高度 10 以及索引 5 处的最后一个建筑物看到海洋。

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

  • stack := a new list
  • 对于 heights 中的每个索引 idx 和高度 h,执行
    • 当 stack 不为​​空且 heights[top of stack ] <= h 时,执行
      • 从中删除最后一个元素堆栈
  • 将 idx 推送到堆栈
  • 返回堆栈

示例

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

def solve(heights):
   stack = []
   for idx, h in enumerate(heights):
      while stack and heights[stack[-1]] <= h:
         stack.pop()
      stack.append(idx)
   return stack

heights = [8, 12, 12, 9, 10, 6]
print(solve(heights))

输入

[8, 12, 12, 9, 10, 6]

输出

[2, 4, 5]

相关文章


有用资源