剑指offer二十之包含min函数的栈
一、题目
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
二、思路
用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数。每次元素存入minStack的时候,如果该元素比minStack的栈顶元素小,则存入minStack,否则用minStack栈顶元素代替该元素存入minStack。
比如dataStack中依次入栈的元素为:5, 4, 3, 8, 10, 11, 12, 1
则minStack依次入栈的元素为: 5, 4, 3, 3, 3, 3, 3, 1
三、代码
import java.util.Stack; /* 用一个栈dataStack保存数据,用另外一个栈minStack保存依次入栈最小的数。每次元素存入minStack的时候,如果该元素比minStack的栈顶元素小,则存入minStack,否则用minStack栈顶元素代替该元素存入minStack。 比如dataStack中依次入栈的元素为:5,4,3,8,10,11,12,1 则minStack依次入栈的元素为:5,4,3,3,3,3,3,1 */ public class Solution { Stack<Integer> dataStack = new Stack<Integer>(); //保存元素 Stack<Integer> minStack = new Stack<Integer>(); //保存最小元素 public void push(int value) { dataStack.push(value); //元素入dataStack if (minStack.isEmpty() || value < minStack.peek()) { //如果minStack为空,或者当前存入的元素小于minStack的栈顶元素,则把该元素存入minStack minStack.push(value); } else { minStack.push(minStack.peek());//如果minStack不为空且当前存入的元素大于或者等于minStack的栈顶元素,则把minStack栈顶元素存入minStack } } public void pop() { dataStack.pop(); minStack.pop(); } public int top() { return dataStack.peek(); } public int min() { return minStack.peek(); } }
--------------------------------------------------------------------------------
参考链接:https://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49