劍指offer——包含min函式的棧
因為要O(1)的時間複雜度,所以必須要輔助棧。這裡我們用兩個棧來實現。s1存放實際入棧元素,s2存放該層及以下最小的元素
push操作是靈魂,s1每次都要push,s2如果一開始為空,也要push。後面如果不為空了,就要進行判斷,push進來的值和棧頂的值哪個小,如果小於就push進來。反之再次push進棧頂的元素(方便pop)
pop就是兩個棧都進行pop,因為s2每一層存的都是s1對應層及以下最小的元素
top是取實際棧頂,返回s1.top
min返回s2.top
class Solution {
public:
//棧的底層是隻能在一端操作的雙端佇列
//直接用兩個stack來實現即可,因為min要o(1)的時復,所以必須要用輔助棧
//pop為什麼不會影響取最小值得自己畫圖看看
void push(int value) {
stack1.push(value);
if(stack2.empty()){
stack2.push(value);
}
else if(stack2.top() >= value) {
stack2.push(value);
}
else{
stack2.push(stack2.top());
}
}
void pop() {
stack1.pop();
stack2.pop();
}
int top() {
return stack1.top();
}
int min() {
return stack2.top();
}
private:
stack<int> stack1, stack2;
};
相關文章
- 【劍指offer】包含min函式的棧函式
- 【劍指offer】13.包含min函式的棧函式
- 包含min函式的棧(劍指offer)---C語言函式C語言
- 力扣 - 劍指 Offer 30. 包含min函式的棧力扣函式
- (十四)劍指offer之棧的壓入彈出序列及包含min函式的棧函式
- 包含min函式的棧函式
- 設計包含min函式的棧函式
- JZ-020-包含 min 函式的棧函式
- 《劍指 Offer》棧實現佇列佇列
- [每日一題] 第二十七題:包含min函式的棧每日一題函式
- 劍指Offer--面試題1:賦值運算子函式面試題賦值函式
- 【劍指offer】字串的排列字串
- 【劍指offer】兩個棧實現一個佇列佇列
- 【劍指offer】兩個佇列實現一個棧佇列
- 【演算法】設計包含 min函式的棧,時間複雜度都是 O(1)演算法函式時間複雜度
- 劍指offer | 09. 用兩個棧實現佇列佇列
- 劍指offer-用兩個棧實現佇列-php佇列PHP
- 劍指offer——正規表示式匹配C++C++
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串的組合字串
- 劍指offer-JavaScript版JavaScript
- 【劍指offer】左旋轉字串字串
- 劍指Offer題解合集
- 劍指 Offer 38. 字串的排列字串
- 劍指Offer 表示數值的字串字串
- 【劍指offer】樹的子結構
- 劍指 offer(1) -- 陣列篇陣列
- Leetcode劍指offer(八)LeetCode
- 【劍指offer】字串轉整數字串
- 劍指offer刷題記錄
- 《劍指offer》:[54]表示數值的字串字串
- 【劍指offer】陣列中的逆序對陣列
- 【劍指offer】替換字串中的空格字串
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java
- 劍指offer——重建二叉樹二叉樹
- 【劍指offer】二叉樹深度二叉樹
- 【劍指offer】員工年齡排序排序