1642. 可以到达的最远建筑
难度中等53收藏分享切换为英文接收动态反馈
给你一个整数数组 heights
,表示建筑物的高度。另有一些砖块 bricks
和梯子 ladders
。
你从建筑物 0
开始旅程,不断向后面的建筑物移动,期间可能会用到砖块或梯子。
当从建筑物 i
移动到建筑物 i+1
(下标 从 0 开始 )时:
- 如果当前建筑物的高度 大于或等于 下一建筑物的高度,则不需要梯子或砖块
- 如果当前建筑的高度 小于 下一个建筑的高度,您可以使用 一架梯子 或
(h[i+1] - h[i])
个砖块
如果以最佳方式使用给定的梯子和砖块,返回你可以到达的最远建筑物的下标(下标 从 0 开始 )。
示例 1:
1 | 输入:heights = [4,2,7,6,9,14,12], bricks = 5, ladders = 1 |
示例 2:
1 | 输入:heights = [4,12,2,7,3,18,20,3,19], bricks = 10, ladders = 2 |
示例 3:
1 | 输入:heights = [14,3,19,3], bricks = 17, ladders = 0 |
提示:
1 <= heights.length <= 105
1 <= heights[i] <= 106
0 <= bricks <= 109
0 <= ladders <= heights.length
记忆化搜索(超时+超内存)
1 | class Solution { |
贪心(重要题型)
思路:优先使用梯子,如果梯子不够了,选择最小的那个gap
,然后将这个gap
换成砖块,一直替换,直至当前剩余的砖块不够往下一个index
继续走并且梯子的数量用完了
1 | class Solution { |