当前位置:网站首页>[头条]笔试题——最小栈
[头条]笔试题——最小栈
2022-08-01 23:58:00 【陈亦康】


解法一:(相对解法二,会非常鸡肋)
思路:
- 由于获取堆栈最小元素时间复杂度为O(1),所有用创建一个变量min用来存放最小值
- 将存放最小值的变量min设为Integer.MAX_VALUE
- push方法里,每push一次用min比较
- 创建两个栈,第一个栈用来存放数据,第二栈用来通过变量第一个栈而得出最小数据的零时栈
class MinStack {
public Stack<Integer> stack;
public Stack<Integer> stackTmp;
public MinStack() {
stack = new Stack<>();
stackTmp = new Stack<>();
}
//先赋最大值
public int min = Integer.MAX_VALUE;
public void push(int val) {
//有比他小的就赋值
if(val < min){
min = val;
}
stack.push(val);
}
public void pop() {
if(stack.pop() == min){
//被pop后min需要重新赋值,依旧用最大值
min = Integer.MAX_VALUE;
//将所有元素转移到stackTmp,目的是为了让min重新与所有元素比较
while(!stack.empty()){
int tmp = stack.pop();
if(tmp < min){
min = tmp;
}
stackTmp.push(tmp);
}
//再转移到stack
while(!stackTmp.empty()){
stack.push(stackTmp.pop());
}
}
}
public int top() {
return stack.peek();
}
public int getMin() {
return min;
}
}解法二:(分析如下)



代码如下:
class MinStack {
Stack<Integer> stack;//普通栈
Stack<Integer> stackMin;//最小栈
public MinStack() {
stack = new Stack<>();
stackMin = new Stack<>();
}
//压栈
public void push(int val) {
//给最小站赋初值
if(stackMin.empty()){
stackMin.push(val);
}
//若不是初值,先判断是否小于等于(等于是以防pop后为空)最小栈栈顶元素,若是,才给最小栈压栈
else if(stackMin.peek() >= val){
stackMin.push(val);
}
stack.push(val);
}
public void pop() {
if((int)stackMin.peek() == (int)stack.peek()){
stackMin.pop();
}
stack.pop();
}
public int top() {
return stack.peek();
}
public int getMin() {
return stackMin.peek();
}
}
边栏推荐
- 工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
- yay 报错 response decoding failed: invalid character ‘<‘ looking for beginning of value;
- Classical Literature Reading--DLO
- 【Leetcode】475. Heaters
- Win11如何获得最佳电源效率?
- 在MySQL登录时出现Access denied for user ‘root‘@‘localhost‘ (using password YES) 拒绝访问问题解决
- Chrome书签插件,让你实现高效整理
- 2022 6th Strong Net Cup Part WP
- Excel表格数据导入MySQL数据库
- Thymeleaf简介
猜你喜欢
随机推荐
很多人喜欢用多御安全浏览器,竟是因为这些原因
UI自动化测试框架搭建-标记性能较差用例
字节跳动面试官:请你实现一个大文件上传和断点续传
SphereEx苗立尧:云原生架构下的Database Mesh研发实践
1个月写900多条用例,二线城市年薪33W+的测试经理能有多卷?
contentEditable属性
好好活就是做有意义的事,有意义的事就是好好活
一款简洁的文件传输工具
【MySQL系列】MySQL索引事务
如何优雅的消除系统重复代码
不就是个TCC分布式事务,有那么难吗?
Win11如何获得最佳电源效率?
ES中SQL查询详解
分享一份接口测试项目(非常值得练手)
根本上解决mysql启动失败问题Job for mysqld.service failed because the control process exited with error code
Thymeleaf简介
cdh6 opens oozieWeb page, Oozie web console is disabled.
security CSRF漏洞保护
在MySQL中使用MD5加密【入门体验】
cdh6打开oozieWeb页面,Oozie web console is disabled.









