实现一个最小栈(简单难度)

输入:

[“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 stack = new Stack<>();

private Stack 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()) {

写在最后

学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯。所以:贵在坚持!

最后再分享的一些BATJ等大厂20、21年的面试题,把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

Mybatis面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

MySQL面试专题

蚂蚁金服三面直击面试官的Redis三连,Redis面试复习大纲在手,不慌

并发编程面试专题

oRW2dw8u-1720102902946)]

Mybatis面试专题

[外链图片转存中…(img-UBzEwzGn-1720102902947)]

MySQL面试专题

[外链图片转存中…(img-jgSR3yAE-1720102902947)]

并发编程面试专题

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值