剑指 Offer 30. 包含min函数的栈
思路#
方法一:辅助栈 (单调栈)#
这里参考:面试题30. 包含 min 函数的栈(辅助栈,清晰图解)
相似题目:剑指 Offer 59 - I. 滑动窗口的最大值
1 class MinStack { 2 private: 3 stack<int> A; 4 stack<int> B; 5 public: 6 /** initialize your data structure here. */ 7 MinStack() { 8 9 } 10 11 void push(int x) { 12 A.push(x); 13 //这里不能写x < B.top(),否则下面这种输入过不了 14 /* 15 ["MinStack","push","push","push","getMin","pop","getMin"] 16 [[],[0],[1],[0],[],[],[]] 17 */ 18 if(B.empty() || x <= B.top()) { 19 B.push(x); 20 } 21 } 22 23 void pop() { 24 if(A.top() == B.top()) 25 B.pop(); 26 A.pop(); 27 } 28 29 int top() { 30 return A.top(); 31 } 32 33 int getMin() { 34 return B.top(); 35 } 36 }; 37 38 /** 39 * Your MinStack object will be instantiated and called as such: 40 * MinStack* obj = new MinStack(); 41 * obj->push(x); 42 * obj->pop(); 43 * int param_3 = obj->top(); 44 * int param_4 = obj->getMin(); 45 */
方法二:一个栈同时保存当前值和栈内最小值#
这里参考:一个栈同时保存当前值和栈内最小值
1 class MinStack { 2 private: 3 stack<pair<int, int>> S; 4 public: 5 /** initialize your data structure here. */ 6 MinStack() { 7 8 } 9 10 void push(int x) { 11 if(S.empty()) 12 S.push(make_pair(x, x)); 13 else 14 S.push( make_pair(x, std::min(x, S.top().second)) ); 15 } 16 17 void pop() { 18 S.pop(); 19 } 20 21 int top() { 22 return S.top().first; 23 } 24 25 int min() { 26 return S.top().second; 27 } 28 }; 29 30 /** 31 * Your MinStack object will be instantiated and called as such: 32 * MinStack* obj = new MinStack(); 33 * obj->push(x); 34 * obj->pop(); 35 * int param_3 = obj->top(); 36 * int param_4 = obj->min(); 37 */
分类:
剑指Offer(第2版)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南