第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

實(shí)現(xiàn)一個(gè)隊(duì)列,其中push_rear(),pop_front()和get_min()都是常量時(shí)間操作

實(shí)現(xiàn)一個(gè)隊(duì)列,其中push_rear(),pop_front()和get_min()都是常量時(shí)間操作

實(shí)現(xiàn)一個(gè)隊(duì)列,其中push_rear(),pop_front()和get_min()都是常量時(shí)間操作我遇到了這個(gè)問(wèn)題: 實(shí)現(xiàn)一個(gè)隊(duì)列,其中push_rear(),pop_front()和get_min()都是常量時(shí)間操作。我最初想過(guò)使用一個(gè)最小堆數(shù)據(jù)結(jié)構(gòu),它對(duì)于get_min()具有O(1)復(fù)雜度。但是push_rear()和pop_front()將是O(log(n))。有誰(shuí)知道實(shí)現(xiàn)這樣一個(gè)有O(1)push(),pop()和min()的隊(duì)列的最佳方法是什么?我搜索了這個(gè),并想指出這個(gè)算法極客線程。但似乎沒(méi)有一個(gè)解決方案遵循所有3種方法的恒定時(shí)間規(guī)則:push(),pop()和min()。感謝所有的建議。
查看完整描述

3 回答

?
夢(mèng)里花落0921

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以使用O(1)pop(),push()和get_min()實(shí)現(xiàn)堆棧:只需將當(dāng)前最小值與每個(gè)元素一起存儲(chǔ)。因此,例如,堆棧[4,2,5,1](頂部的1)變?yōu)?code>[(4,4), (2,2), (5,2), (1,1)]。

然后,您可以使用兩個(gè)堆棧來(lái)實(shí)現(xiàn)隊(duì)列。推到一個(gè)堆棧,從另一個(gè)堆棧彈出; 如果第二個(gè)堆棧在彈出期間為空,則將所有元素從第一個(gè)堆棧移動(dòng)到第二個(gè)堆棧。

例如,對(duì)于pop請(qǐng)求,從第一個(gè)堆棧移動(dòng)所有元素[(4,4), (2,2), (5,2), (1,1)],第二個(gè)堆棧將是[(1,1), (5,1), (2,1), (4,1)]。現(xiàn)在返回第二個(gè)堆棧的頂部元素。

要查找隊(duì)列的最小元素,請(qǐng)查看各個(gè)最小堆棧的最小兩個(gè)元素,然后取這兩個(gè)值中的最小值。(當(dāng)然,這里有一些額外的邏輯,其中一個(gè)堆棧是空的,但這并不難解決)。

這將有O(1)get_min()push()攤銷O(1) pop()。


查看完整回答
反對(duì) 回復(fù) 2019-07-31
  • 3 回答
  • 0 關(guān)注
  • 1664 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)