80. Leetcode 1642. 可以到达的最远建筑 (堆-技巧三-事后小诸葛)
生活随笔
收集整理的這篇文章主要介紹了
80. Leetcode 1642. 可以到达的最远建筑 (堆-技巧三-事后小诸葛)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個整數數組 heights ,表示建筑物的高度。另有一些磚塊 bricks 和梯子 ladders 。你從建筑物 0 開始旅程,不斷向后面的建筑物移動,期間可能會用到磚塊或梯子。當從建筑物 i 移動到建筑物 i+1(下標 從 0 開始 )時:如果當前建筑物的高度 大于或等于 下一建筑物的高度,則不需要梯子或磚塊
如果當前建筑的高度 小于 下一個建筑的高度,您可以使用 一架梯子 或 (h[i+1] - h[i]) 個磚塊
如果以最佳方式使用給定的梯子和磚塊,返回你可以到達的最遠建筑物的下標(下標 從 0 開始 )。示例 1:輸入:heights = [4,2,7,6,9,14,12], bricks = 5, ladders = 1
輸出:4
解釋:從建筑物 0 出發,你可以按此方案完成旅程:
- 不使用磚塊或梯子到達建筑物 1 ,因為 4 >= 2
- 使用 5 個磚塊到達建筑物 2 。你必須使用磚塊或梯子,因為 2 < 7
- 不使用磚塊或梯子到達建筑物 3 ,因為 7 >= 6
- 使用唯一的梯子到達建筑物 4 。你必須使用磚塊或梯子,因為 6 < 9
無法越過建筑物 4 ,因為沒有更多磚塊或梯子。示例 2:輸入:heights = [4,12,2,7,3,18,20,3,19], bricks = 10, ladders = 2
輸出:7示例 3:輸入:heights = [14,3,19,3], bricks = 17, ladders = 0
輸出:3import heapqclass Solution:def furthestBuilding(self, heights: List[int], bricks: int, ladders: int) -> int:h = []for i in range(1, len(heights)):diff = heights[i] - heights[i-1]if diff <= 0:continueif bricks < diff and ladders > 0:ladders -= 1if h and -h[0] > diff:bricks -= heapq.heappop(h)else:continuebricks -= diffif bricks < 0:return i - 1heapq.heappush(h, -diff)return len(heights) - 1
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的80. Leetcode 1642. 可以到达的最远建筑 (堆-技巧三-事后小诸葛)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 78. Leetcode 264. 丑数
- 下一篇: 排序算法-冒泡排序