剑指Offer-30-包含min函数的栈
30 包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)
示例:
输入:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.min(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.min(); --> 返回 -2.
问题理解
这里要定义一个栈的功能是要有一个实现最小值的功能的接口,所以可以通过一个栈来进行管理,当然也可以用一个辅助栈来进行功能的实现。这里用一个栈在存储数据时,进行两次数据的存储,一个是之前最早的值,另一个是当前的要插入的值。
问题解决
这里特殊的地方是push和pop的时候,push时会将之前最小的值一并存储,pop时会将最小值和实际value一并取出。
代码如下所示:
class MinStack {
public:
/** initialize your data structure here. */
stack<int> min_stack;
int min_num = INT_MAX;
MinStack() {
}
//Use one stack to solve the problem.Every time add to stack,save the small num before and new value.
void push(int x) {
min_stack.push(min_num);
if(x < min_num){
min_num = x;
}
min_stack.push(x);
}
//Use double pop to keep new of min value and top value.
void pop() {
min_stack.pop();
min_num = min_stack.top();
min_stack.pop();
}
int top() {
return min_stack.top();
}
//The min value saved in min_num;
int min() {
return min_num;
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->min();
*/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!