力扣刷題筆記6 棧和佇列經典題目

2022-07-08 17:54:19 字數 2850 閱讀 7975

題目1.刪除字串中的所有相鄰重複項

解題思路:1.分析特殊情況,當字串大小為空或者長度為1時,直接返回即可

2.將字串中的第乙個入棧,然後對後面的每乙個字元進行判斷:

(1)若當前的字母和棧頂的字母相同,則彈出棧頂的字母

(2)若當前的字母和棧頂的字母不同,則放入當前的字母

3.最後將棧中的字元取出,組成的新字串就是答案

具體**如下:

題目2.最小棧

解題思路:(1)這道題使用輔助棧即可,建立棧a和b,分別儲存入棧元素和當前棧內最小值

(2)先將整數的最大值存入棧b中

(3)當有數字入棧a時候,取出b的棧頂元素和該數字比較,如果小於該數字,則定義和b棧的棧頂元素相同的整數併入b棧,否則將該數字入棧(此時b棧的棧頂元素就是a棧所有元素最小值)

(4) 出棧和取棧頂元素a,b操作沒有什麼不同

具體**如下:

題目3.有效的括號

解題思路:這道題使用的是雜湊表和棧結合的方法

(1)首先建立乙個map,map裡存入的元素為,,,,',5},;

(2)遍歷字串中的所有字元,並判斷map[字元]是否大於等於一併小於等於三,如果是壓入棧,如果不是判斷map[棧頂元素]是否等於map[該元素]-3,如果不是,直接返回false,否則取出棧頂元素並繼續迴圈

(3)迴圈結束後,如果棧為空,則該字串為有效括號字串,返回true,否則返回false;

具體**如下:

題目4.每日溫度

解題思路: (1)我們首先建立乙個棧,這個棧是遞減棧(即棧內元素從下到上依次遞減)

(2)遍歷整個陣列,如果棧不空,且當前數字大於棧頂元素,那麼如果直接入棧的話就不是 遞減棧 ,所以需要取出棧頂元素,由於當前數字大於棧頂元素的數字,而且一定是第乙個大於棧頂元素的數,直接求出下標差就是二者的距離。

(3)繼續看新的棧頂元素,直到當前數字小於等於棧頂元素停止,然後將數字入棧,這樣就可以一直保持遞減棧,且每個數字和第乙個大於它的數的距離也可以算出來。

具體**如下:

題目4.前k個高頻元素

解題思路:這題使用到了優先佇列,所謂優先對列就是對放入該佇列的元素安裝公升序或者降序進行排序(我在這裡使用的是公升序)

(1)首先建立乙個mapa,用關鍵字表示存入的數字,值來表示關鍵字出現的次數

(2)遍歷a,每次遍歷時都要判斷佇列內的元素個數是否小於k,如果小於就將pair《遍歷的元素.second,遍歷的元素.first>壓入佇列,如果大於k,就要判斷佇列頭部元素的first值是否小於該元素second值,如果小於就取出對頭並將遍歷到的元素按剛剛說到的方式壓入佇列

(3)遍歷完成後,此時佇列裡儲存的所有元素.second就是我們需要的答案!

具體**如下

注意:

pair型別放入優先佇列中總是先比較first的大小,相同在比較second的大小 

力扣刷題筆記2 鍊錶經典題目

1.移除鍊錶元素 解題思路 這道題很簡單,就是從頭到尾遍歷鍊錶,如果找到val值和目標值相同的節點就刪除該節點,最後返回煉表頭節點即可 具體 如下 2.翻轉鍊錶 解題思路 定義乙個頭指標head和尾指標node,while head node 迴圈結束後即完成了鍊錶的翻轉 具體 如下 題目3 鍊錶相...

力扣刷題 最小棧

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。minstack minstack new minstack minstack.push 2 minstack.push 0 minstack.push 3 minstack.getmin 返回 3.minstack....

力扣刷題棧1249

stl中的erase 野指標問題 erase 函式用於在順序型容器中刪除容器的乙個元素 erase函式的返回值是乙個指向被刪除元素的下乙個元素的迭代器 與int固定四個位元組不同有所不同,size t的取值range是目標平台下最大可能的陣列尺寸,一些平台下size t的範圍小於int的正數範圍,又...