作者:小卢
专栏:《Leetcode》
喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》
155. 最小栈
题目描述;
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack 类:
MinStack() 初始化堆栈对象。
void push(int val) 将元素val推入堆栈。
void pop() 删除堆栈顶部的元素。
int top() 获取堆栈顶部的元素。
int getMin() 获取堆栈中的最小元素。
示例:
思路:
利用俩个栈,一个用了正常存储,一个用了存储最小值,遍历正常的栈,如果_st的top小于等于_minst的top,就将这个栈压进去,出栈的话也是类似
代码:
class MinStack { public: MinStack() { } void push(int val) { _st.push(val); if(_minst.empty()||val<=_minst.top()) { _minst.push(val); } } void pop() { if(_minst.top()==_st.top()) { _minst.pop(); } _st.pop(); } int top() { return _st.top(); } int getMin() { return _minst.top(); } private: stack<int>_st; stack<int>_minst; };
JZ31 栈的压入、弹出序列
题目描述:
示例:
代码:
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { stack<int>st; int pushi=0; int popi=0; while(pushi<pushV.size()) { st.push(pushV[pushi++]); while(!st.empty()&&st.top()==popV[popi]) { st.pop(); popi++; } } return popi==popV.size(); } };