力扣1642.可以到达的最远建筑
-
二分答案
-
class Solution { public: int furthestBuilding(vector<int>& heights, int bricks, int ladders) { auto check = [&](int mid) -> bool { vector<int> h; for(int i=1;i<=mid;i++) { int t = heights[i] - heights[i-1]; if(t<=0) continue; else h.emplace_back(t); } ranges::sort(h); int t = bricks; for(int i=0;i<h.size();i++) { if(t >= h[i]) t -= h[i]; else return (h.size() - i) <= ladders; } return true; }; int l = 0,r = heights.size() - 1; while(l<r) { int mid = l + r + 1>> 1; if(check(mid)) l = mid; else r = mid - 1; } return l; } };