设计一个支持 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.
提示:
pop、top 和 getMin 操作总是在 非空栈 上调用。
简单介绍:
题目:最小栈
题目难度:简单
使用语言:JAVA。
这道题来自leetcode题库的设计标签。
解题思路:
首先看题、分析题意,我们可以明确1个关键点:
1.维护一个堆栈
2.维护一个最小值
既然,我们已经分析出来题目的关键任务了,下面我们就可以开始思考实现了。
我们采用算法与数据结构的思路来剖析一下这题,
数据结构:
要实现对数据的操作,我们要先明确存储数据的数据结构。
该题的数据结构的作用:
1.采用链表的方式来保存整个栈
算法:
既然明确了我们的数据结构,我们就可以开始我们的算法分析了。
1.第一步,初始化工作。
2.第二步,设置入栈,出栈,取栈,取最小值函数
代码部分:
public class MinStack { //内部 class Node{ int value; int min; Node next; Node(int v,int m){ value=v; min=m; 爱的选择题 西游记中心思想 next=null; } } Node head; /** initial最新古装片ize your data structure here. */ public考试紧张吃什么药 MinStack() { head=null; } public void push(int x) { if(head==null){ head=new Node(x,x); }el{ Node n=new Node(x,Math.min(x,head.min)); n.next=head; head=n; } } public void pop() { if(head!=null) head=head.next; 与众不同的我} public int top() { if(head!=null){ return head.value; } el{ return -1; } } public int getMin() { if(head!=null){ return head.min; } el return -1; }}
结语:
晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!晚安!
本文地址:https://blog.csdn.net/weixin_44337475/article/details/107396915
本文发布于:2023-04-07 12:29:37,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/8d73b41142b3ae014eb7f629084819f0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:LeetCode解析——155.最小栈.doc
本文 PDF 下载地址:LeetCode解析——155.最小栈.pdf
留言与评论(共有 0 条评论) |