leetcode1642.可以到達的最遠建築
題目大意
給你一個整數陣列 heights ,表示建築物的高度。另有一些磚塊 bricks 和梯子 ladders 。
你從建築物 0 開始旅程,不斷向後面的建築物移動,期間可能會用到磚塊或梯子。
當從建築物 i 移動到建築物 i+1(下標 從 0 開始 )時:
如果當前建築物的高度 大於或等於 下一建築物的高度,則不需要梯子或磚塊
如果當前建築的高度 小於 下一個建築的高度,您可以使用 一架梯子 或 (h[i+1] - h[i]) 個磚塊
如果以最佳方式使用給定的梯子和磚塊,返回你可以到達的最遠建築物的下標(下標 從 0 開始 )。
題目用例就去看原題吧…
解題思路
如果後面的建築物更高,則有兩種選擇:用一個梯子;用高度差數量的磚塊;
分析題目可知,無論高度差有多少,一個梯子總是可以爬上去,因此:應該在高度差大的地方用梯子,高度差小的地方用磚頭;
用小根堆(大小為梯子數量)表示用梯子時的最小高度差。則若當前高度差為x,小根堆的堆頂元素為y:
- x<=0:表示不需要梯子或者磚塊就可以到達,結果直接+1即可;
- 若x<=y:則x高度差的位置應該用磚頭(這樣可以將磚頭的使用數量降到最低,保留更多磚頭):(1)如果當前磚頭的數量不足了,則無法再進行下去了,返回結果;(2)否則將磚頭數量扣除高度差;
- 若x>y:表示這裡的高度差更高,高度差為y的地方使用磚頭,同樣根據上面的條件進行判斷即可;
class Solution{
public:
int furthestBuilding(vector<int> & heights, int bricks, int ladders){
// 沒有梯子的情況,直接算一遍就行了
if (ladders == 0){
return zeroLadder(heights, bricks);
}
// 如果梯子足夠多,則全都可以走完
if (heights.size() <= ladders){
return heights.size() - 1;
}
// 建立梯子數量的小根堆,表示用梯子的高度差
priority_queue<int, vector<int>, greater<int>> myqueue;
int ans = 0, i = 1, diff = 0;
// 初始化的時候這裡可能存入了負值,後面需要判斷堆頂元素的正負
for (; i < heights.size() && myqueue.size() < ladders; ++i){
myqueue.push(heights[i] - heights[i - 1]);
}
for (; i < heights.size(); ++i){
// 當前高度差
diff = heights[i] - heights[i - 1];
// 大於堆頂元素,在堆頂位置應該考慮用磚頭
if (diff >= myqueue.top()){
int curNeed = myqueue.top();
// 如果磚頭不夠了,則結束
if (curNeed > bricks){
break;
}
myqueue.pop();
// 如果高度差為正,則扣除一部分磚頭
if (curNeed > 0){
bricks -= curNeed;
}
++ans;
// 將現在的高度差加入堆中
myqueue.push(diff);
}
// 當前位置考慮用磚頭
else{
if (diff > bricks){
break;
}
if (diff > 0){
bricks -= diff;
}
ans++;
}
}
return ans + ladders;
}
int zeroLadder(vector<int> & heights, int bricks){
int ans = 0;
for(int i = 1; i < heights.size(); ++i){
if (heights[i] - heights[i - 1] <= 0){
++ans;
continue;
}
if (heights[i] - heights[i - 1] > bricks){
break;
}
++ans;
bricks -= (heights[i] - heights[i -1]);
}
return ans;
}
};
相關文章
- Tractica:2025年全球建築機器人市場將達到2.26億美元機器人
- 從宋代建築到場景原畫
- 2020年建築焊工(建築特殊工種)模擬考試題及建築焊工(建築特殊工種)操作證考試
- 2020年建築電工(建築特殊工種)考試題庫及建築電工(建築特殊工種)考試總結
- 建築轉手稿
- 管理建築專案的技巧
- 2020年建築電工(建築特殊工種)考試題庫及建築電工(建築特殊工種)實操考試視訊
- 城市更新:從建築到政策的可持續行為促進
- 從幕後到臺前:建築在遊戲設計中的意義遊戲設計
- 建築後端程式碼後端
- 建築工程的3種招標方式
- 《The Witness》:遊戲中的建築學(上)遊戲
- 建築師——由來已久的夢想
- 中國建築節能協會:2022建築能耗與碳排放研究報告
- 遊戲作為隱形的建築學遊戲
- 世界上最高的建築物在哪裡?
- CSiXRevit 2022,建築建模軟體
- 遊戲設計文件→圖檔,建築工程圖學“真香”策劃表達需求遊戲設計
- Memoori:2018年全球智慧商業建築大資料市場達156億美元大資料
- LLM仍然不能規劃,刷屏的OpenAI o1遠未達到飽和OpenAI
- 浙建職院建築工程學院與建築機器人廠家固建舉辦校企融合洽談活動機器人
- 建築裝修設計軟體
- 華熙LIVE五棵松冰上運動中心能耗水平遠低於常規建築
- 建築資訊圖繪製軟體那個專業,怎麼畫建築資訊圖
- 人工智慧對智慧建築有哪些影響,智慧建築發展存在哪些問題?人工智慧
- 城鄉建設領域碳達峰實施方案為建築企業數字化轉型指明方向
- 從zoom到Easyjet,那些最生動的企業安全建設培訓課OOM
- 綠色建築智慧建造山東加快推進建築產業鏈綠色低碳發展產業
- 中國建築節能協會:2020年中國建築能耗研究報告(附下載)
- ARCHICAD 26:塑造未來的建築設計神話
- 在遊戲裡設計房屋的建築師們遊戲
- 【cesium】打造科技感建築泛光效果
- IEA:2021年全球建築業報告
- 中國建築科學研究院:2021年建築智慧化應用現狀調研白皮書
- 房屋結構的“1代到5代”通常是指建築設計和技術的發展演變。從最早期的傳統建築,到現代高科技智慧化建築,每一代的房屋結構都體現了不同的技術水平、設計理念以及人們對居住環境需求的變化。以下是房屋結構1代到5代的主要區別:
- 如何買到便宜低價的雲伺服器?這3條建議可以看看!伺服器
- AutoCAD 2020中文版建築設計從入門到精通下載連結
- 最流暢的遠端桌面,有沒有最流暢的遠端桌面推薦,具體怎麼使用?