当前位置:网站首页>[头条]笔试题——最小栈
[头条]笔试题——最小栈
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();
}
}
边栏推荐
- Wincc报表教程(SQL数据库的建立,wincc在数据库中保存和查询数据,调用Excel模板把数据保存到指定的位置和打印功能)
- Docker搭建Mysql主从复制
- oozie startup error on cdh's hue, Cannot allocate containers as requested resource is greater than maximum allowed
- ES中SQL查询详解
- 好好活就是做有意义的事,有意义的事就是好好活
- 很多人喜欢用多御安全浏览器,竟是因为这些原因
- Unity—四元数、欧拉角API+坐标系统
- 使用 Zadig 交付云原生微服务应用
- YOLO等目标检测模型的非极大值抑制NMS和评价指标(Acc, Precision, Recall, AP, mAP, RoI)、YOLOv5中[email protected]与
- asyncawait和promise的区别
猜你喜欢
随机推荐
ES中SQL查询详解
多御安全浏览器android版更新至1.7,改进加密协议
【加密周报】经济衰退在加息气氛中蔓延 美联储“放手一搏”?盘点上周加密市场发生的重大事件
Sql之各种Join
经典文献阅读之--DLO
切面打印调取的方法
【Leetcode】470. Implement Rand10() Using Rand7()
使用Jenkins做持续集成,这个知识点必须要掌握
使用 Zadig 交付云原生微服务应用
solidity
DOM 事件及事件委托
thinkphp漏洞总结
一个有些意思的项目--文件夹对比工具(一)
C language Qixi is coming!It's time to show the romance of programmers!
Flink Yarn Per Job - Yarn应用
@Transactional 注解使用详解
类型“FC<Props>”的参数不能赋给类型“ForwardRefRenderFunction<unknown, Props>”的参数。 属性“defaultProps”的类型不兼容。 不
检查 Oracle 版本的 7 种方法
Spark Sql之union
20220725资料更新