題目1: 150. 逆波蘭表達(dá)式求值
這個(gè)題目主要考察的是棧效五。
逆波蘭表達(dá)式計(jì)算只需要依次提取出相鄰兩個(gè)操作數(shù)睹晒,接下來(lái)提取操作符并進(jìn)行運(yùn)算.
需要注意到下面的幾點(diǎn):
- 運(yùn)算數(shù)可能自帶'+'稽莉、'-'符號(hào)策添,所以判斷運(yùn)算符或者運(yùn)算數(shù)時(shí)耀考慮這個(gè)特殊情況山上。
2)可以編寫輔助函數(shù)將輸入的運(yùn)算數(shù)轉(zhuǎn)化為整數(shù)以便于進(jìn)一步運(yùn)算。
3)逆波蘭表達(dá)式中前一個(gè)運(yùn)算數(shù)是被操作數(shù)片橡,后面一個(gè)是操作數(shù)前硫,不要弄反了。
4)遇到操作數(shù)時(shí)將操作數(shù)轉(zhuǎn)換成整數(shù)壓入棧上涡扼,遇到操作符時(shí)再依次彈出操作數(shù)和被操作數(shù)并進(jìn)行相應(yīng)的運(yùn)算稼跳。
題目2: 239. 滑動(dòng)窗口最大值
對(duì)于這個(gè)題目完全沒(méi)有任何思路,看了答案把相關(guān)的代碼抄了一下吃沪。
這個(gè)題目跟其他滑動(dòng)窗口題目不一樣汤善,一般的題目只需要將滑動(dòng)窗口右移,并不需要添加額外的數(shù)據(jù)結(jié)構(gòu)票彪,而這道題目需要用優(yōu)先隊(duì)列來(lái)存儲(chǔ)滑動(dòng)窗口萎津。
解題思路:使用優(yōu)先隊(duì)列存儲(chǔ)單調(diào)遞增的元素以及其索引值(map<pair<int,int>>),前k個(gè)元素可以直接插入到優(yōu)先隊(duì)列抹镊。對(duì)于后面的元素锉屈,需要將其插入優(yōu)先隊(duì)列,并且保證優(yōu)先隊(duì)列棧頂元素索引值跟當(dāng)前索引值之差不小于k垮耳,這樣保證了目前的單調(diào)棧只包含當(dāng)前元素以及其左側(cè)的k個(gè)元素颈渊,此時(shí)的棧頂元素就是目前單調(diào)棧的最大元素(默認(rèn)優(yōu)先隊(duì)列是大頂堆)遂黍。
題目3: 347. 前 K 個(gè)高頻元素
題目思路:
首先需要用map統(tǒng)計(jì)每個(gè)元素出現(xiàn)的次數(shù)并保存下來(lái)。
然后對(duì)于將所有元素及統(tǒng)計(jì)次數(shù)插入到優(yōu)先隊(duì)列中俊嗽。
再?gòu)膬?yōu)先隊(duì)列中彈出k個(gè)元素(利用了優(yōu)先隊(duì)列是大頂堆的特性)雾家。