class Solution2 { private Stack<Integer> stack1 = new Stack<Integer>();//用来存放数据 private Integer min = Integer.MAX_VALUE;//用来存放最小值 public void push(int value) { if(stack1.empty()){ stack1.push(value); min = value; } else{ stack1.push(value); if(min > value){ min = value; } } } public void pop() { stack1.pop(); } public int top() { return stack1.peek(); } public int min() { return min; } } class Solution1 { private Stack<Integer> stack1,stack2; public void push(int value) { stack1.push(value); if(stack2.empty()) stack2.push(value); else if(value<=stack2.peek()) { stack2.push(value); } } public void pop() { if(stack1.peek()==stack2.peek()) stack2.pop(); stack1.pop(); } public int top() { return stack1.peek(); } public int min() { return stack2.peek(); } }
由于要求是O(1)的复杂度,因此在存放的时候就需要保证最小的值的实时更新,这难度不大,主要是能不能想到这一点,存入数据的时候就进行最小值的判断,