Leetcode演算法刷題筆記2 棧 隊 堆

2021-10-13 16:31:02 字數 2955 閱讀 1022

leetcode 225. 用佇列實現棧

leetcode 155. 最小棧

尾語相關刷題筆記部落格

競賽常用模板整理(acm/icpc/ccsp)

leetcode演算法刷題筆記1-鍊錶

leetcode演算法刷題筆記2-棧、隊、堆

leetcode演算法刷題筆記3-遞迴與回溯

leetcode演算法刷題筆記4-貪心

leetcode演算法刷題筆記5-二叉樹

leetcode演算法刷題筆記6-圖

leetcode演算法刷題筆記7-動態規劃

leetcode演算法刷題筆記8-二分查詢

函式功能

s.empty()

堆疊為空則返回真

s.size()

返回棧中元素數目

s.push()

在棧頂增加元素

s.top()

返回棧頂元素

s.pop()

移除棧頂元素(不會返回棧頂元素的值)

函式功能

q.empty()

判斷佇列q是否為空,當佇列q空時,返回true;否則為false(值為0(false)/1(true))。

q.size()

訪問佇列q中的元素個數。不可寫成sizeof(q)或size(q)

q.push()

會將乙個元素a置入佇列q中

q.front()

返回佇列q內的第乙個元素(也就是第乙個被置入的元素)。(不可寫成front(q))

q.back()

會返回佇列q中最後乙個元素(也就是最後被插入的元素)。(不可寫成back(q))

q.pop()

會從佇列q中移除第乙個元素。(不可寫成pop(q))

函式功能

時間make_heap

根據指定的迭代器區間以及乙個可選的比較函式,來建立乙個heap.

o(n)

push_heap

把指定區間的最後乙個元素插入到heap中.

o(logn)

pop_heap

彈出heap頂元素, 將其放置於區間末尾.

o(logn)

sort_heap

堆排序演算法,通常通過反覆呼叫pop_heap來實現.

n*o(logn)

is_heap

判斷給定區間是否是乙個heap.

o(n)

is_heap_until:

找出區間中第乙個不滿足heap條件的位置.

o(n)

使用佇列實現棧的下列操作:

push(x) -- 元素 x 入棧

pop() -- 移除棧頂元素

top() -- 獲取棧頂元素

empty() -- 返回棧是否為空

你只能使用佇列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 這些操作是合法的。

你所使用的語言也許不支援佇列。 你可以使用 list 或者 deque(雙端佇列)來模擬乙個佇列 , 只要是標準的佇列操作即可。

你可以假設所有操作都是有效的(例如, 對乙個空的棧不會呼叫 pop 或者 top 操作)。

#include

#include

using

namespace std;

class

mystack

//臨時佇列,與新元素的次序交換

void

push

(int x)

while

(!temp_queue.

empty()

)}intpop()

inttop()

bool

empty()

private

: queue<

int> _data;

//_data為佇列元素,也是我們設定的棧內元素 };

intmain()

設計乙個支援 push ,pop ,top 操作,並能在常數時間內檢索到最小元素的棧。

push(x) —— 將元素 x 推入棧中。

pop() —— 刪除棧頂的元素。

top() —— 獲取棧頂元素。

getmin() —— 檢索棧中的最小元素。

示例:

輸入: [「minstack」,「push」,「push」,「push」,「getmin」,「pop」,「top」,「getmin」]

[,[-2],[0],[-3],,,,]

輸出: [null,null,null,null,-3,null,0,-2]

#include

#include

using

namespace std;

class

minstack

//臨時佇列,與新元素的次序交換

void

push

(int x)

else

_min.

push

(x);

//壓入x到最小棧 }}

void

pop(

)int

top(

)int

getmin()

private

: stack<

int> _data;

//資料棧

stack<

int> _min;

//最小值棧 };

intmain()

誠邀各校各地有志之士加入我們大學生it學習**流:871352155(請各位廣告大佬高抬貴手,常討論學習無關的朋友請出門右拐∑(っ°д°;)っ)

leetcode刷題筆記 2

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...

leetcode熱題100刷題筆記 2

62.不同路徑 64.最小路徑和 70.爬樓梯 這道題很容易看出來可以用dfs解決,但是其中有乙個容易迷惑的點,就是所謂的 最長路徑 並不一定經過根節點!因此,我們需要在dfs的過程中,對每乙個節點,計算其左子樹的高度l以及右子樹的高度r,那麼以當前節點為起點的路徑,經過的節點的最大值就是l r 1...

演算法 LeetCode刷題

given 1,3 2,6 8,10 15,18 return 1,6 8,10 15,18 關鍵就是a 1 b 0 也就是array i 1 1 array i 0 const merge array return array console.log merge 1,3 8,10 2,6 15,1...