1、155. 最小棧
設計乙個支援 push ,pop ,top 操作,並能在常數時間內檢索到最小元素的棧。
push(x) —— 將元素 x 推入棧中。
pop() —— 刪除棧頂的元素。
top() —— 獲取棧頂元素。
getmin() —— 檢索棧中的最小元素。
解答:兩個棧,乙個維護最小值
2、150. 逆波蘭表示式求值
根據 逆波蘭表示法,求表示式的值。
有效的運算子包括 +, -, *, / 。每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。
解答:棧的經典應用
3、394. 字串解碼
給定乙個經過編碼的字串,返回它解碼後的字串。
編碼規則為: k[encoded_string],表示其中方括號內部的 encoded_string 正好重複 k 次。注意 k 保證為正整數。
你可以認為輸入字串總是有效的;輸入字串中沒有額外的空格,且輸入的方括號總是符合格式要求的。
此外,你可以認為原始資料不包含數字,所有的數字只表示重複的次數 k ,例如不會出現像 3a 或 2[4] 的輸入
解答:注意字串和陣列的相互轉換。
4、94. 二叉樹的中序遍歷
5、133. 轉殖圖
給你無向連通圖中乙個節點的引用,請你返回該圖的深拷貝(轉殖)。
圖中的每個節點都包含它的值val
(int
) 和其鄰居的列表(list[node]
)。
6、200. 島嶼數量
給你乙個由 '1'(陸地)和 '0'(水)組成的的二維網格,請你計算網格中島嶼的數量。
島嶼總是被水包圍,並且每座島嶼只能由水平方向和/或豎直方向上相鄰的陸地連線形成。
此外,你可以假設該網格的四條邊均被水包圍。
解答:從任意陸地點出發,一次性遍歷完,把該點周圍的陸地全變為水。 看有多少個陸地。
7、84. 柱狀圖中最大的矩形
參考這篇文章,解釋的非常到位
單調棧經典題,必會。
從左到右遍歷,如果發現比上乙個柱子高的柱子,則計算可以接到的雨水數量。
注意,乙個凹形的水槽,是分多次計算的,每次計算的是乙個矩形。
9、542. 01 矩陣
給定乙個由 0 和 1 組成的矩陣,找出每個元素到最近的 0 的距離。
兩個相鄰元素間的距離為 1 。
解答:要求最短距離(層數),肯定bfs比dfs更加合適。
bfs使用的資料結構是佇列。
leetcode演算法專題訓練 四 棧與佇列專題
劍指 offer 09.用兩個棧實現佇列 解題思路 設定兩個佇列,左邊的佇列用來入隊,右邊的佇列用來出隊。時間複雜度 o 1 空間複雜度 o 1 class cqueue void int value intdeletehead int val stk2.top stk2.pop return va...
LeetCode 單調棧專題
單調棧,顧名思義,是維持單調遞增或遞減的棧 單調遞增棧的形式如上,適合尋找,距離他最近的,比他小的,左右兩邊元素 與單調遞增棧的用法相反 單調遞增棧的原理 class solution st.push i 單調棧套路 return ans 單調遞減棧 class solution st.push i...
leetcode演算法專題訓練 七 查詢專題
33.搜尋旋轉排序陣列題目描述 公升序排列的整數陣列 nums 在預先未知的某個點上進行了旋轉 例如,0,1,2,4,5,6,7 經旋轉後可能變為 4,5,6,7,0,1,2 請你在陣列中搜尋 target 如果陣列中存在這個目標值,則返回它的索引,否則返回 1 每乙個數都是獨一無二的。解題思路 二...