Problem:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
Intuition:
这个题目我们要稍微注意一下,找出最小元素的操作可能会进行多次,不是进行一次就结束了。这就意味着我们仅仅用一个整数存最小元素的方案是行不通的,我们要某种数据结构将所有栈中的元素按大小顺序进行保存。
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| public class CodingInterview_029 { private Stack<Integer> dataStack=new Stack<>(); private Stack<Integer> minStack=new Stack<>(); public void push(int node){ dataStack.push(node); if(minStack.isEmpty()||node<minStack.peek()){ minStack.push(node); } }
public void pop(){ int dataTop=dataStack.peek(); int minTop=minStack.peek(); dataStack.pop(); if(dataTop==minTop){ minStack.pop(); } }
public int top(){ return dataStack.peek(); }
public int min(){ return minStack.peek(); } }
|