給你乙個整數陣列 heights ,表示建築物的高度。另有一些磚塊 bricks 和梯子 ladders 。
你從建築物 0 開始旅程,不斷向後面的建築物移動,期間可能會用到磚塊或梯子。
當從建築物 i 移動到建築物 i+1(下標 從 0 開始 )時:
如果當前建築物的高度 大於或等於 下一建築物的高度,則不需要梯子或磚塊
如果當前建築的高度 小於 下乙個建築的高度,您可以使用 一架梯子 或 (h[i+1] - h[i]) 個磚塊
如果以最佳方式使用給定的梯子和磚塊,返回你可以到達的最遠建築物的下標(下標 從 0 開始 )。
題目用例就去看原題吧…
如果後面的建築物更高,則有兩種選擇:用乙個梯子;用高度差數量的磚塊;
分析題目可知,無論高度差有多少,乙個梯子總是可以爬上去,因此:應該在高度差大的地方用梯子,高度差小的地方用磚頭;
用小根堆(大小為梯子數量)表示用梯子時的最小高度差。則若當前高度差為x,小根堆的堆頂元素為y:
class
solution
// 如果梯子足夠多,則全都可以走完
if(heights.
size()
<= ladders)
// 建立梯子數量的小根堆,表示用梯子的高度差
priority_queue<
int, vector<
int>
, greater<
int>> myqueue;
int ans =
0, i =
1, diff =0;
// 初始化的時候這裡可能存入了負值,後面需要判斷堆頂元素的正負
for(
; i < heights.
size()
&& myqueue.
size()
< ladders;
++i)
for(
; i < heights.
size()
;++i)
myqueue.
pop();
// 如果高度差為正,則扣除一部分磚頭
if(curneed >0)
++ans;
// 將現在的高度差加入堆中
myqueue.
push
(diff);}
// 當前位置考慮用磚頭
else
if(diff >0)
ans++;}
}return ans + ladders;
}int
zeroladder
(vector<
int>
& heights,
int bricks)
if(heights[i]
- heights[i -1]
> bricks)
++ans;
bricks -
=(heights[i]
- heights[i -1]
);}return ans;}}
;
1642 可以到達的最遠建築
class solution priority queueq int qsum 0 int lastpos 0 int preheight heights 0 for int i 0 i heights.size i else 看過一番處理後還是不能跳到這個位置 if qsum bricks els...
可以控制到多低(功率)?
可以控制到多低 功率 how low power can you go?低功率模式實驗 探索低功耗模式的最佳方法是選擇乙個微控制器,並在各種低功耗模式下實際執行處理器。在這篇文章中,我決定抹去我久經考驗的nxp kinetis l freedom board,我不僅用過它,還用在了許多產品 應用程式...
原來「人」可以無恥到這種程度
在cnbeta看到這則訊息 url 大站掛iframe變相攻擊小站 顏面盡失治標不治本 b url 才發現 人 原來可以無恥到這種程度。b 校內網在其首頁嵌入 iframe 變相對某第三方模板站進行ddos b 截圖如下 color red update 鏈結已經失效 color url 目前還存在...