1.题目
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
2.分析
最初想法是定义一个成员变量min来存放最小元素,但是当最小元素弹出后,min就需要相应改变,所以必须把每次的最小值都存储下来。考虑采用一个辅助栈来存放最小值:
栈 3,4,2,5,1
辅助栈 3, 3,2,2,1
(压入时,把每次的最小元素(之前最小元素与新入栈元素的较小值)保存起来放到辅助栈中)
3.程序
1 package first; 2 3 import java.util.Stack; 4 5 public class StackWithMin { 6 Stack<Integer> stack_data=new Stack<Integer>(); 7 Stack<Integer> stack_min=new Stack<Integer>(); 8 9 public void push(int node) { 10 stack_data.push(node); 11 if(stack_min.empty() || stack_min.peek()>node) { 12 stack_min.push(node); 13 }else { 14 stack_min.push(stack_min.peek()); 15 } 16 } 17 18 public void pop() { 19 if(!stack_data.empty()) { 20 stack_data.pop(); 21 stack_min.pop(); 22 } 23 } 24 25 public int min() { 26 return stack_min.peek(); 27 } 28 }