算法40 leetcode 155.最小栈
2022/1/1 11:09:12
本文主要是介绍算法40 leetcode 155.最小栈,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
主要是为了实现getMin函数
题目
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) —— 将元素 x 推入栈中。
pop() —— 删除栈顶的元素。
top() —— 获取栈顶元素。
getMin() —— 检索栈中的最小元素。
伪单栈解决
压入和弹出时都同时压入推出最小值,检索时最小值在栈顶
class MinStack { stack<int> s; int minV=INT_MAX; public: MinStack() { } void push(int val) { s.emplace(minV); minV=val>minV?minV:val; s.emplace(val); // minV=min(val,minV); } void pop() { // if(!s.empty()){ s.pop(); minV=s.top(); s.pop(); // } } int top() { // if(!s.empty()){ return s.top(); // } } int getMin() { // if(!s.empty()){ return minV; // return minV; } };
单栈,不消耗额外空间
栈内存放与最小值的差值,压入和弹出判断差值正负,如为负则更新最小值:压入时min=压入值,弹出时min=val-差值;
注意储存差值时范围会大于int的范围
class MinStack { long min=INT_MAX; stack<long> s; public: MinStack() {} void push(int val) { long d=val-min; s.emplace(d); min=d<0?val:min; } void pop() { long t=s.top(); min=t<0?min-t:min; s.pop(); } int top() { long t=s.top(); return t>0?t+min:min; } int getMin() { return min; } };
这篇关于算法40 leetcode 155.最小栈的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享