Mảng heights độ cao các tòa nhà. Người nhảy từ 0, có bricks gạch (mỗi gạch 1 đơn vị cao) và ladders thang (bất kỳ độ cao). Chỉ dùng 1 lần mỗi vật. Tìm chỉ số tòa nhà xa nhất có thể đến.
Ví dụ: heights=[5,8,7,6,2,3,1,4], bricks=3, ladders=2 → 7. Dùng gạch lên tầng 1 (cao 3), nhảy tự do đến tầng 4, thang lên tầng 5, nhảy đến 6, thang lên 7.
Giải thuật (Heap ưu tiên thang cho độ cao lớn)
- Heap
templưu độ cao chênh lệch (dương) đã dùng gạch (lưu âm để max-heap). - Duyệt
itừ 1..n-1:dist = heights[i] - heights[i-1].- Nếu
dist > 0: dùng gạch (bricks -= dist), push-distvào heap. - Nếu
bricks < 0: đổi gạch lớn nhất thành thang (bricks -= heappop(temp),ladders--). - Nếu
bricks < 0hoặcladders < 0: trả vềi-1.
- Trả về
n-1.
Ví dụ minh họa
from heapq import heappush, heappop
def solve(heights, bricks, ladders):
temp = []
for i in range(1, len(heights)):
dist = heights[i] - heights[i-1]
if dist > 0:
bricks -= dist
heappush(temp, -dist)
if bricks < 0:
ladders -= 1
bricks -= heappop(temp)
if bricks < 0 or ladders < 0:
return i - 1
return len(heights) - 1
print(solve([5, 8, 7, 6, 2, 3, 1, 4], 3, 2))
Đầu vào
[5, 8, 7, 6, 2, 3, 1, 4], 3, 2
Đầu ra
7