设计两个栈,一个栈是stackData,另一个栈是stackMin.
思路:
压入数据:
1.若有数据到来则将数据压入stackData,若stackMin为空,则将数据压入stackMin
2.若stackMin不为空,则比较压入的数据和stackMin的栈顶元素的大小,若小于或等于则压入,若大于则不压入
弹出数据:
1.若stackData弹出的数据等于stackMin的栈顶数据则stackMin也弹出数据.
具体代码如下:
package chapter1; import java.util.Scanner; import java.util.Stack; public class pro1_getMin { private Stack<Integer> stackData ; private Stack<Integer>stackMin ; public pro1_getMin() { this.stackData = new Stack<Integer>() ; this.stackMin = new Stack<Integer>() ; } public void push(int newNum) { stackData.push(newNum) ; if(stackMin.isEmpty()) { stackMin.push(newNum) ; } else { if(newNum <= stackMin.peek()) { stackMin.push(newNum) ; } } } public int pop() { if(stackData.isEmpty()) { throw new RuntimeException("Your stack is empty!") ; } int value = stackData.pop(); if(value == stackMin.peek()) { stackMin.pop(); } return value ; } public int getMin() { if(stackMin.isEmpty()) { throw new RuntimeException("Your stack is empty!") ; } return stackMin.peek(); } }