leetcode1642 可以到達的最遠建築

2021-10-25 10:38:25 字數 1541 閱讀 9218

給你乙個整數陣列 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 目前還存在...