在 Python 中寻找可以看到海洋的建筑物

在 Python 中寻找可以看到海洋的建筑物

假设我们有一个不同建筑物高度的列表。一个高度为 heights[i] 的建筑物只有在它右侧的建筑物都比它低时才能看到海洋。我们需要找出可以看到海洋的建筑物索引,按升序排列。

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

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

  • stack := 一个新的列表
  • 对于 heights 中的每个索引 idx 和高度 h,我们进行以下操作 –
    • 当 stack 不为空且 heights [stack 的顶部] <= h 时,我们执行以下操作 –
      • 从 stack 中删除最后一个元素
  • 将 idx 推入 stack
  • 返回 stack

示例

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

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]

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程