# 1642. Furthest Building You Can Reach Young {%hackmd theme-dark %} h = [2, 3, 5, 1] brick = 20 2->3:1 3->5:2 ladder = 3. 1->19999:1 i brick ladder find max index of dfs(brick - h[i+1], ladder), dfs(brick, ladder-1) b=6 l=1 house = [1,3,6,8,10,100] [ b.l b b ^.] 1 3 6 100 102 104 gap. = [ 2+3+94 2 2 90] ```cpp= int maxDistance(vecotr<int> &height, int bricks, int ladders) { if (bricks < 0 || ladder < 0) { return -1; } if (height.size() == 1) { return 1; } // h: [1, 3, 6, 8, 10, 100], brick 10, 1 ladder // maxHeap 3,2,2,2 brick 1, 1 ladder // [1, 2, 3] b=1 l=1 // [1, 3, 5, 99] b=3 l=1 // 1, 3, 5, 99, b=3, l=1 // 3: b:1, l:1 max: 2 // 5: b:3, l:0 max: // 99 b:1, l:0 max: 2 priority_queue<vector<int>> maxHeap; int i = 1; while (i < height.size() && bricks > 0 && ladders != 0; i++) { if (height[i] >= height[i-1]) { i++; continue; } bricks -= height[i] - height[i-1]; if (bricks < 0) { if (!maxHeap.empty() && ladder > 0) { bricks += maxHeap.top(); maxHeap.pop(); ladders--; } else if (ladder > 0) { ladders--; i++; } else { return i-1; } } else { maxHeap.push(height[i] - height[i-1]); i++; } } return i-1; } ``` ###### tags: `mock interview` `面試`