当前位置:网站首页>[头条]笔试题——最小栈
[头条]笔试题——最小栈
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();
}
}
边栏推荐
猜你喜欢

如何重装Win11?一键重装Win11方法

认识USB、Type-C、闪电、雷电接口

字节跳动面试官:请你实现一个大文件上传和断点续传

Spark Sql之join on and和where

【MySQL系列】MySQL数据库基础

如何优雅的消除系统重复代码

零基础如何学习单片机,一位入门者的进阶路径,可参考

技术分享 | 接口测试中如何使用Json 来进行数据交互 ?

Artifact XXXwar exploded Artifact is being deployed, please wait...(已解决)

cdh6 opens oozieWeb page, Oozie web console is disabled.
随机推荐
Artifact XXXwar exploded Artifact is being deployed, please wait...(已解决)
Spark Sql之union
分享一份接口测试项目(非常值得练手)
easy-excel 解决百万数据导入导出,性能很强
解析正则表达式的底层实现原理
contentEditable属性
Convert LocalDateTime to Date type
不就是个TCC分布式事务,有那么难吗?
【MySQL系列】MySQL索引事务
numpy.where
学习英语的网站与资料
Spark Sql之join on and和where
Zadig 面向开发者的自测联调子环境技术方案详解
SphereEx苗立尧:云原生架构下的Database Mesh研发实践
Flink学习第四天——完成第一个Flink 流批一体案例
Docker搭建Mysql主从复制
Appears in oozie on CDH's hue, error submitting Coordinator My Schedule
【MySQL系列】MySQL数据库基础
机器学习文本分类
TCP 可靠吗?为什么?