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中刪除最後一個元素
  • 將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]

更新於:2021年10月14日

315 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告