剑指offer_栈和队列---包含min函数的栈

时间:2022-04-18 17:39:55

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

解题思路

1,两个栈,一个完成基本功能,一个充当辅助栈
2,辅助栈内最小值总是上浮到栈顶

代码实现

/**
*
*/

package 栈和队列;

import java.util.Stack;

/**
* <p>
* Title:MinStack
* </p>
* <p>
* Description:
* </p>
*
* @author 田茂林
* @data 2017年8月22日 上午10:40:43
*/

public class MinStack {
Stack<Integer> stack1 = new Stack<Integer>(); // 主栈
Stack<Integer> stack2 = new Stack<Integer>(); // 辅助栈,栈顶即为最小值
int min = Integer.MAX_VALUE;

public void push(int node) {
stack1.push(node);
if (min > node) {
stack2.push(node);
min = node;
} else {
stack2.push(min); //栈2的顶永远存放当前的最小值
}

}

public void pop() {
if (!stack1.isEmpty() && !stack2.isEmpty()) {
stack1.pop();
stack2.pop();
}

}

public int top() {
return stack1.peek();

}

public int min() {
return stack2.peek();

}

public static void main(String[] args) {

}
}