劍指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】13.包含min函式的棧函式
- 包含min函式的棧(劍指offer)---C語言函式C語言
- 力扣 - 劍指 Offer 30. 包含min函式的棧力扣函式
- 設計包含min函式的棧函式
- JZ-020-包含 min 函式的棧函式
- [每日一題] 第二十七題:包含min函式的棧每日一題函式
- 《劍指 Offer》棧實現佇列佇列
- 劍指OFFER
- 劍指Offer--面試題1:賦值運算子函式面試題賦值函式
- 劍指offer-用兩個棧實現佇列-php佇列PHP
- 劍指offer | 09. 用兩個棧實現佇列佇列
- 劍指offer導航
- Leetcode劍指offer(八)LeetCode
- 劍指 offer21
- 劍指offer16
- 劍指 offer20
- 劍指offer——正規表示式匹配C++C++
- 【劍指offer】【2】字串的空格字串
- 劍指offer-JavaScript版JavaScript
- 【劍指Offer】矩形覆蓋
- 劍指Offer題解合集
- 劍指offer——跳臺階
- 六、劍指 Offer(25~29)
- 劍指 Offer 38. 字串的排列字串
- 劍指Offer 表示數值的字串字串
- 劍指offer第41~50題
- 劍指 offer(1) -- 陣列篇陣列
- 劍指offer刷題記錄
- 劍指offer-第2章
- 【劍指offer】2.替換空格
- 劍指offer刷題day02
- LeetCode|劍指 Offer 49.醜數LeetCode
- 劍指offer第49題 醜數
- 劍指offer-替換空格02
- 劍指offer解析-上(Java實現)Java
- 劍指offer解析-下(Java實現)Java
- 劍指offer 變態跳臺階
- 劍指Offer 撲克牌順子