【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】

这篇具有很好参考价值的文章主要介绍了【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】,面试必须掌握的101题,leetcode,数据结构,java,算法,面试,栈

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】,面试必须掌握的101题,leetcode,数据结构,java,算法,面试,栈
【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】,面试必须掌握的101题,leetcode,数据结构,java,算法,面试,栈

🚩 题目链接

  • 155. 最小栈

⛲ 题目描述

设计一个支持 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 次

🌟 求解思路&实现代码&运行结果


⚡ 栈 + 数据结构设计

🥦 求解思路
  1. 该题需要设计数据结构来求解,除了返回最小值的操作外,我们只使用一个栈就可以解决问题,所以,关键之处就在于怎么实现返回最小值的操作?
  2. 我们再设计一个栈,该栈用来存储元素的最小值,但是需要注意的是,它需要和我们的另一个栈保持同步的操作,保证每次入栈的都是元素的最小值。
  3. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class MinStack {

    private Stack<Integer> data;
    private Stack<Integer> min;

    public MinStack() {
        data = new Stack<>();
        min = new Stack<>();
    }

    public void push(int x) {
        data.push(x);
        if (min.isEmpty()) {
            min.push(x);
        } else {
            min.push(Math.min(min.peek(), x));
        }
    }

    public void pop() {
        data.pop();
        min.pop();
    }

    public int top() {
        return data.peek();
    }

    public int getMin() {
        return min.peek();
    }
}

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(val);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */
🥦 运行结果

【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】,面试必须掌握的101题,leetcode,数据结构,java,算法,面试,栈


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】,面试必须掌握的101题,leetcode,数据结构,java,算法,面试,栈

【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】,面试必须掌握的101题,leetcode,数据结构,java,算法,面试,栈文章来源地址https://www.toymoban.com/news/detail-835939.html

到了这里,关于【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode】设计数据结构 | List、Stack、Queue、DLinkedList

    设计链表(中等) 707. 设计链表 冗余版 代码复用简化版 用栈实现队列(简单) 232. 用栈实现队列 用队列实现栈(简单) 225. 用队列实现栈 方法一:双队列实现 方法二:单队列实现 设计循环队列(中等) 622. 设计循环队列 使用数组实现 使用链表实现 设计循环双端队列(中

    2024年02月14日
    浏览(24)
  • leetcode 155.最小栈

    🌟 leetcode链接:https://leetcode.cn/problems/min-stack/description/ 思路: 准备两个栈,一个存放数据的栈,一个最小栈(依次存放最小值)。存放数组的栈 push 、 top 、 pop 都是常规操作,唯一不同的是 getMin ,当每次 push 的时候检查一下当前 push 的数据是否比最小栈的栈顶元素数据小

    2024年02月11日
    浏览(30)
  • 【Leetcode】155. 最小栈、JZ31 栈的压入、弹出序列

     作者:小卢   专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》 155. 最小栈 题目描述; 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化

    2024年02月13日
    浏览(36)
  • 扎实打牢数据结构算法根基,从此不怕算法面试系列之010 week02 01-01 最简单的排序算法-选择排序法的设计思想

    接下类,我们学习另外一类非常基础的算法,即排序算法。 排序算法是计算机科学领域研究的非常深入的一类算法,排序这个动作本身也是非常重要的, 很多时候面对无需的数据,首先需要做的就是对他们进行排序。 排序算法——目的:让数据有序。 排序算法——种类:种

    2023年04月21日
    浏览(48)
  • LeetCode155:最小栈,最简单的中等难度题,时间击败100%,内存也低于官方

    这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 最近运气不错,在LeetCode上白捡一道送分题,官方设定的难度是 中等 ,然而此题难度放在 简单 的题库中都是垫底的存在,对于刷题数太少的欣宸而言,这简直就是力扣的馈赠,建议大家也不要错过

    2024年02月09日
    浏览(23)
  • C++面试:单例模式、工厂模式等简单的设计模式 & 创建型、结构型、行为型设计模式的应用技巧

            理解和能够实现基本的设计模式是非常重要的。这里,我们将探讨两种常见的设计模式:单例模式和工厂模式,并提供一些面试准备的建议。 目录 单例模式 (Singleton Pattern) 工厂模式 (Factory Pattern) 面试准备  1. 理解设计模式的基本概念 2. 掌握实现细节 3. 讨论优缺

    2024年02月01日
    浏览(56)
  • 数据结构与算法设计分析—— 数据结构及常用算法

    1、顺序表与链表 线性表是 线性结构 ,是包含n个数据元素的有限序列,通过顺序存储的线性表称为 顺序表 ,它是将线性表中所有元素按照其逻辑顺序,依次存储到指定存储位置开始的一块连续的存储空间里;而通过链式存储的 链表 中,每个结点不仅包含该元素的信息,还

    2024年02月07日
    浏览(43)
  • 添加与搜索单词 - 数据结构设计

    添加与搜索单词 - 数据结构设计 addWord 中的 word 由小写英文字母组成 search 中的 word 由 ‘.’ 或小写英文字母组成 1 = word.length = 25 为了加快查询速度,可以使用字典树存储单词,基本结构是:字典树Trie是由isLast(判断当前字符是否作为单词的最后一位)和大小为26的Trie数组

    2024年03月19日
    浏览(28)
  • 数据结构课程设计

    编制一个能演示执行集合的交、并和差运算的程序。 要求: 集合元素用小写英文字母,执行各种操作应以对话方式执行。 算法要点:利用单链表表示集合;理解好三种运算的含义 分析 : 输入:输入应该具有判断是否为小写字母的功能,如果不是小写字母,应该舍去,同时

    2024年02月02日
    浏览(35)
  • 【数据结构】设计环形队列

    环形队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 环形队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元

    2024年02月09日
    浏览(83)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包