在 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 中删除最后一个元素
- 当 stack 不为空且 heights [stack 的顶部] <= h 时,我们执行以下操作 –
- 将 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]