用Python编写查找有更好视野的建筑物的程序
假设我们提供了一个包含不同建筑物高度的数组。这些建筑物位于一条线上,如果它不被其他更高的建筑物遮挡,则它会有更好的视野。因此,根据包含高度的数组,我们必须找到没有其他更高的建筑物遮挡视线的建筑物。返回满足条件的数组索引。
因此,如果输入如下所示:height = [5, 6, 8, 7],则输出将是[2, 3]。索引0和1处的建筑物受到索引2处建筑物的遮挡。位于位置2的较高建筑物位于位置3的较矮建筑物后面,因此不会被遮挡。
要解决此问题,我们将遵循以下步骤:
- res:新列表
- h:0
- for i in range(len(heights)-1) to -1,递减1,执行以下操作
- 如果heights[i] > h,则
- 在res的末尾插入i
- h:heights[i]
- 如果heights[i] > h,则
- 返回列表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]