包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路
- 需要一个普通栈和一个最小栈,最小栈的栈顶总是记录当前普通栈中的最小元素
top的时候,直接取普通栈顶、最小栈顶的元素即可pop的时候,要先判断栈非空,然后将普通栈和最小站同时poppush的时候,普通栈直接push,最小栈需要跟栈顶元素比较,将其中更小的那个push进去- 始终要注意对栈非空的判断
class Solution {
public:
void push(int value) {
st.push(value);
//注意,判断栈非空的语句要在最前面
if(minst.empty() || value<minst.top())
minst.push(value);
else
minst.push(minst.top());
}
void pop() {
if(!st.empty()){
st.pop();
minst.pop();
}
}
int top() {
return st.top();
}
int min() {
return minst.top();
}
private:
stack<int>st,minst;
};
本文介绍了一种特殊栈的设计方案,通过维护两个栈:一个用于常规操作,另一个用于跟踪最小值。这种方法确保了min函数的时间复杂度为O(1)。
290

被折叠的 条评论
为什么被折叠?



