剑指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());
	}
}
相关推荐
超级大只老咪2 小时前
数组相邻元素比较的循环条件(Java竞赛考点)
java
hh随便起个名2 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
小浣熊熊熊熊熊熊熊丶2 小时前
《Effective Java》第25条:限制源文件为单个顶级类
java·开发语言·effective java
毕设源码-钟学长3 小时前
【开题答辩全过程】以 公交管理系统为例,包含答辩的问题和答案
java·eclipse
啃火龙果的兔子3 小时前
JDK 安装配置
java·开发语言
星哥说事3 小时前
应用程序监控:Java 与 Web 应用的实践
java·开发语言
写写闲篇儿3 小时前
微软面试之白板做题
面试·职场和发展
派大鑫wink3 小时前
【JAVA学习日志】SpringBoot 参数配置:从基础到实战,解锁灵活配置新姿势
java·spring boot·后端
xUxIAOrUIII3 小时前
【Spring Boot】控制器Controller方法
java·spring boot·后端
Dolphin_Home3 小时前
从理论到实战:图结构在仓库关联业务中的落地(小白→中级,附完整代码)
java·spring boot·后端·spring cloud·database·广度优先·图搜索算法