單調棧刷題ing

2021-10-08 10:42:27 字數 1457 閱讀 5711

單調棧分為單調遞增棧和單調遞減棧

同理單調遞減棧即棧內元素保持單調遞減的棧
​ 單調遞增棧即棧內元素保持單調遞增的棧

操作規則(下面都以單調遞增棧為例)

​ 如果新的元素比棧頂元素大,就入棧

​ 如果新的元素較小,那就一直把棧內元素彈出來,直到棧頂比新元素小

加入這樣乙個規則之後,會有什麼效果

​ 棧內的元素是遞增的

​ 當元素出棧時,說明這個新元素是出棧元素向後找第乙個比其小的元素

舉個例子,配合下圖,現在索引在 6 ,棧裡是 1 5 6 。

接下來新元素是 2 ,那麼 6 需要出棧。

當 6 出棧時,右邊 2 代表是 6 右邊第乙個比 6 小的元素。

​ 當元素出棧後,說明新棧頂元素是出棧元素向前找第乙個比其小的元素

​ 當 6 出棧時,5 成為新的棧頂,那麼 5 就是 6 左邊第乙個比 6 小的元素。

攻略2:

單調棧就是比普通的棧多乙個性質,即維護乙個棧內元素單調。

比如當前某個單調遞減的棧的元素從棧底到棧頂分別是:[10, 9, 8, 3, 2],如果要入棧元素5,需要把棧頂元素pop出去,直到滿足單調遞減為止,即先變成[10, 9, 8],再入棧5,就是[10, 9, 8, 5]。

**模板

int largestrectanglearea(vector& heights)

st.push_back(i);

}return ans;

}

給定 n 個非負整數表示每個寬度為 1 的柱子的高度圖,計算按此排列的柱子,下雨之後能接多少雨水。

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-hbiup3zq-1595486181328)(c:\users\86178\desktop\力扣\\2020-06-12_143220.png)]

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-qevanfb4-1595486181331)(c:\users\86178\desktop\力扣\\2020-06-12_143304.png)]

class solution 

s.push(i);

}return res;

}};

給定 n 個非負整數,用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

輸入: [2,1,5,6,2,3]

輸出: 10

class solution 

s.push(i);

}return ans;

}};

演算法刷題ING

給定字串j代表石頭中寶石的型別,和字串s代表你擁有的石頭。s中每個字元代表了一種你擁有的石頭的型別,你想知道你擁有的石頭中有多少是寶石。j中的字母不重複,j和s中的所有字元都是字母。字母區分大小寫,因此 a 和 a 是不同型別的石頭。示例 輸入 j aa s aaabbbb 輸出 3class so...

貪心演算法刷題ing

有 n 位使用者參加活動,他們的 id 從 0 到 n 1,每位使用者都 恰好 屬於某一使用者組。給你乙個長度為 n 的陣列 groupsizes,其中包含每位使用者所處的使用者組的大小,請你返回使用者分組情況 存在的使用者組以及每個組中使用者的 id 你可以任何順序返回解決方案,id 的順序也不受...

字串刷題ing

給定乙個字串,逐個翻轉字串中的每個單詞。示例 1 輸入 the sky is blue 輸出 blue is sky the 示例 2 輸入 hello world 輸出 world hello 解釋 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。示例 3 輸入 a good ...