一)最小栈简介
说明:最小栈是一种算法思路,主要是用来记录栈中最小元素,方便O(1)复杂度获取。
基本原理:
第一步:初始化一个主栈,再初始化一个最小栈(存放最小的元素)
第二步:当数据新增时,直接push进主栈,再把进栈数据和最小栈栈顶元素比较,如数据比最小栈栈顶元素小,就push进最小栈,如比最小栈栈顶元素大,把最小栈栈顶元素重新push进最小栈。
最小栈图解:
二)最小栈
第一步:初始化一个主栈,一个最小栈
/**
* 最小栈
* @author ouyangjun
*/
public class MinStack {
private Stack<Integer> stack = new Stack<Integer>(); // 主栈
private Stack<Integer> minStack = new Stack<Integer>(); // 最小栈
}
第二步:进栈
/** 进栈 */
public void push(Integer value) {
if (value == null) throw new NullPointerException();
stack.push(value); // 数据直接进主栈
if (!minStack.empty() && value >= minStack.peek()) { // 和最小栈栈顶元素比较
minStack.push(minStack.peek()); // 把最小栈栈顶元素重新push到最小栈
} else {
minStack.push(value); // 把最小值push到最小栈
}
}
第三步:获取主栈栈顶元素
/** 获取主栈栈顶元素 */
public Integer peek () {
return stack.empty() ? null : stack.peek();
}
第四步:获取最小栈栈顶元素, 即最小元素
/** 获取最小栈栈顶元素, 即最小元素 */
public Integer getMin() {
return minStack.empty() ? null : minStack.peek();
}
第五步:main方法测试
public static void main(String[] args) {
MinStack stack = new MinStack();
stack.push(433);
System.out.println("主栈进栈元素为:" + stack.peek() + ", 最小栈中最小元素为:" + stack.getMin());
stack.push(23);
System.out.println("主栈进栈元素为:" + stack.peek() + ", 最小栈中最小元素为:" + stack.getMin());
stack.push(45);
System.out.println("主栈进栈元素为:" + stack.peek() + ", 最小栈中最小元素为:" + stack.getMin());
stack.push(67);
System.out.println("主栈进栈元素为:" + stack.peek() + ", 最小栈中最小元素为:" + stack.getMin());
stack.push(4);
System.out.println("主栈进栈元素为:" + stack.peek() + ", 最小栈中最小元素为:" + stack.getMin());
}
打印效果图:
识别二维码关注个人微信公众号
本章完结,待续、欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!