IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 实现一个最小栈(简单难度) -> 正文阅读

[数据结构与算法]实现一个最小栈(简单难度)

题目概述(简单难度)

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

  • push(x) —— 将元素 x 推入栈中。
  • pop() —— 删除栈顶的元素。
  • top() —— 获取栈顶元素。
  • getMin() —— 检索栈中的最小元素。

示例:

输入:
["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.

题目链接
点击进入leetcode

思路与代码

思路展现

1:首先定义一个空栈stack和一个最小栈minStack
在这里插入图片描述
我们的stack这个栈是用于存储当前所有元素的,而我们的minStack是用于存储stack中每次插入时的最小元素的.
2:现在我们给定一组元素:3,-1,2,4
首先将我们的3进行入栈操作,因为stack中此时为空,那么3在stack这个栈中算是最小的元素了,所以当3入到stack这个栈中后,minStack这个栈也要将3这个元素入进去,如下所示:
在这里插入图片描述
3:此时继续将-1入到stack栈中,-1此时小于3,那么-1这个元素要入到我们的minStack当中去,如下图所示:
在这里插入图片描述
4:此时继续将2这个元素入到stack栈中去,然后将2和minStack的栈顶元素-1进行大小的判断,此时2大于-1,那么就将2这个元素不入到minStack中,如下图所示:
在这里插入图片描述
5:此时继续将4这个元素入到stack栈中去,然后将4和minStack的栈顶元素-1进行大小的判断,此时4大于-1,那么就将4这个元素不入到minStack中,如下图所示:
在这里插入图片描述
6:欧克入栈的操作就是这些,下面我们来说下出栈操作
stack中的每个元素在进行出栈操作的时候,都需要将每个出栈的元素与minStack的当前栈顶元素进行比较,如果两者相同,就全部都出栈,如果两者不相同,就只出stack栈中的元素即可.
下面给出代码示例:

代码示例

class MinStack {

    //定义两个栈,stack和minStack
    private Stack<Integer> stack = new Stack<>();
    private Stack<Integer> minStack = new Stack<>();
    public MinStack() {

    }
    
    public void push(int val) {
       stack.push(val);
      
       if(minStack.isEmpty()) {
           //先将第一个元素放入stack2当中
           minStack.push(val);
       }else {
            //注意这块需要写等于号
           if(val <= minStack.peek()) {
               minStack.push(val);
          }
       }
       
    }
    
    public void pop() {
        int x = stack.pop();
        if(x == minStack.peek()) {
            minStack.pop();
        }
    }
    
    public int top() {
       return stack.peek();
    }
    
    public int getMin() {
       return minStack.peek();
    }
}

总结

考察对于栈的掌握

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:31:36  更:2021-10-09 16:31:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 9:50:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码