Python程序:查找可见海景的建筑物
假设我们有一组不同建筑物的高度列表。当其右侧所有建筑物的高度都低于该建筑物时,高度为heights[i]的建筑物可以看到海洋。我们必须找到可以看见海洋的建筑物索引,并按升序排列。
因此,如果输入类似于heights = [8, 12, 12, 9, 10, 6],则输出将为[2, 4, 5],因为我们可以在索引2处高度为12的建筑物、索引4处高度为10的建筑物和索引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]
广告