剑指offer面试题21 包含min函数的栈

考察点

java 复制代码
双栈

知识点

题目

分析

题目需要一个能够得到栈的最小元素的min函数,并且min函数,pop,push都要求是O(1)的时间复杂度。遇到栈思维要往双栈上考虑,这种情况一个栈肯定完成不了,需要一个辅助栈,既然要求 O(1)时间内拿到最小元素,那么这个辅助栈的栈顶存的肯定是当前所有元素中最小的元素,所以只要每次入栈的时候取当前元素和辅助栈顶层数据最小值入栈即可。切记注意辅助栈需要和数据栈一起增长,这样当数据栈弹出的时候辅助栈的栈顶数据依然是所有元素中最小的元素

java 复制代码
import java.util.Deque;
import java.util.LinkedList;

public class Stack {
	private Deque stack;
	private Deque minStack;

	public Stack() {
		stack = new LinkedList<>();
		minStack = new LinkedList<>();
	}
	public void push(int val) {
		stack.push(val);
		if (minStack.peek() == null){
			minStack.push(val);
			return;
		}
		int peekData = (int) minStack.peek();
		if (peekData > val) {
			minStack.push(val);
		} else {
			minStack.push(peekData);
		}
	}
	public void pop() {
		if (minStack.peek() == null) {
			throw new Error("stack empty");
		}
		minStack.pop();
		stack.pop();
	}
	public int min() {
		if (minStack.peek() == null) {
			throw new Error("stack empty");
		}
		int peekData = (int) minStack.peek();
		return peekData;
	}
}
public class TwentyOne {
	public static void main(String[] args) {
		Stack stack = new Stack();
		stack.push(3);
		System.out.println(stack.min());
		stack.push(4);
		System.out.println(stack.min());
		stack.push(2);
		System.out.println(stack.min());
		stack.push(1);
		System.out.println(stack.min());
		stack.pop();
		System.out.println(stack.min());
		stack.pop();
		System.out.println(stack.min());
		stack.push(0);
		System.out.println(stack.min());
	}
}
相关推荐
小蒜学长5 分钟前
“喵汪联盟”宠物领养系统的设计与实现(代码+数据库+LW)
java·spring boot·后端·宠物
程序员黑豆7 分钟前
Java字符串常量池完全指南:原理、intern()方法与性能优化最佳实践
java·前端·ai编程
AI人工智能+电脑小能手9 分钟前
大白话说Java设计模式-14-适配器模式(业务实战篇)
java·设计模式·适配器模式·系统兼容·多渠道对接
lazily-c12 分钟前
数据结构模板
数据结构
xbgRS3 小时前
springboot的自动装配
java·spring boot
祖力558 小时前
数据结构的基本概念与单向链表(链表数据类型构造、创建、头插、尾插、头删、尾删)
数据结构·链表
大明者省9 小时前
WSL2 Ubuntu22.04 GPU训练环境配置指南
人工智能·算法·计算机视觉
嘻哈∠※10 小时前
0061基于 SpringBoot 的投稿与稿件处理系统设计与实现
java·spring boot·后端
白狐_79811 小时前
408数据结构第8章:排序②——性质对比秒杀、场景选择与外部排序
java·数据结构·算法
zander25811 小时前
LeetCode 84:柱状图中的最大矩形——单调栈如何确定左右边界
java·数据结构·算法