算法--最小栈

题目

设计一个支持 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()
        }

    }

总结

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

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

相关推荐
hu_yuchen2 分钟前
C++:BST、AVL、红黑树
开发语言·c++
炯哈哈3 分钟前
【上位机——MFC】视图
开发语言·c++·mfc·上位机
我也不曾来过15 分钟前
继承(c++版 非常详细版)
开发语言·c++
拓端研究室TRL19 分钟前
PyMC+AI提示词贝叶斯项目反应IRT理论Rasch分析篮球比赛官方数据:球员能力与位置层级结构研究
大数据·人工智能·python·算法·机器学习
purrrew29 分钟前
【JAVA ee初阶】多线程(3)
java·开发语言
每次的天空38 分钟前
Android学习总结之Java篇(一)
android·java·学习
尤物程序猿1 小时前
【2025最新Java面试八股】如何在Spring启动过程中做缓存预热?
java·缓存·面试
CoovallyAIHub1 小时前
Vision Transformers与卷积神经网络详细训练对比(附代码)
深度学习·算法·计算机视觉
地平线开发者1 小时前
征程 6 逆向自证hbm与bc一致性
算法·自动驾驶
算AI1 小时前
LLM用于科学假设生成:探索与挑战
人工智能·算法