算法--最小栈

题目

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

实现 MinStack 类:

MinStack() 初始化堆栈对象。

void push(int val) 将元素val推入堆栈。

void pop() 删除堆栈顶部的元素。

int top() 获取堆栈顶部的元素。

int getMin() 获取堆栈中的最小元素。

示例 1:

输入:

"MinStack","push","push","push","getMin","pop","top","getMin"

\[\],\[-2\],\[0\],\[-3\],\[\],\[\],\[\],\[\]

输出:

null,null,null,null,-3,null,0,-2

解释:

MinStack minStack = new MinStack();

minStack.push(-2);

minStack.push(0);

minStack.push(-3);

minStack.getMin(); --> 返回 -3.

minStack.pop();

minStack.top(); --> 返回 0.

minStack.getMin(); --> 返回 -2.

提示:

-231 <= val <= 231 - 1

pop、top 和 getMin 操作总是在 非空栈 上调用

push, pop, top, and getMin最多被调用 3 * 104 次

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/min-stack

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解决方法

用额外的栈同步记录当前的最小值

kotlin 复制代码
    //一定要知道 栈是单向进出的 所以才可以保证每一步操作都是最小的
    //
    class MinStack() {
        val stack = LinkedList<Int>()
        val miniStack = LinkedList<Int>()

        fun push(`val`: Int) {
            stack.push(`val`)
            if (!miniStack.isEmpty()) {
                miniStack.push(miniStack.peek().coerceAtMost(`val`))
            }else{
                miniStack.push(`val`)
            }
        }

        fun pop() {
            stack.pop()
            miniStack.pop()
        }

        fun top(): Int {
           return stack.peek()
        }

        fun getMin(): Int {
            return miniStack.peek()
        }

    }

总结

好久没有周末来加班了,其实也没有那么累吧。闲着也没事。

提拔亲信确实是领导的必然选择啊 随缘吧

相关推荐
车载测试工程师11 分钟前
ARXML文件解析-2
java·服务器·网络·数据库·经验分享·网络协议·车载系统
猫咪-952714 分钟前
链表算法中常用操作和技巧
数据结构·算法·链表
被AI抢饭碗的人15 分钟前
算法题(114):矩阵距离
算法
javaisC15 分钟前
数据结构----------顺序查找,折半查找和分块查找(java实现)
java·数据结构·算法
振鹏Dong16 分钟前
搜索树——AVL、红黑树、B树、B+树
java
捡田螺的小男孩18 分钟前
新来的技术总监,把DDD落地的那叫一个高级优雅!
java·后端
陳長生.25 分钟前
JAVA EE_多线程-初阶(二)
java·开发语言·jvm·java-ee
Mcband34 分钟前
主流程发起,去除子流程的时长计算问题
java·前端·算法
QTX1873036 分钟前
常见的 JavaScript 框架和库
开发语言·javascript·ecmascript
猿java1 小时前
银行系统需要服务降级吗?
java·后端·面试