716. Max Stack
Design a max stack that supports push, pop, top, peekMax and popMax. 1. push(x) -- Push element x onto stack. 2. pop() -- Remove the element on top of the stack and return it. 3. top() -- Get the element on the top. 4. peekMax() -- Retrieve the maximum element in the stack. 5. popMax() -- Retrieve the maximum element in the stack, and remove it. If you find more than one maximum elements, only remove the top-most one. Example 1: MaxStack stack = new MaxStack(); stack.push(5); stack.push(1); stack.push(5); stack.top(); -> 5 stack.popMax(); -> 5 stack.top(); -> 1 stack.peekMax(); -> 5 stack.pop(); -> 1 stack.top(); -> 5 https://leetcode.com/problems/max-stack/solution/
class MaxStack { Stack<Integer> stack; Stack<Integer> maxStack; /** initialize your data structure here. */ public MaxStack() { stack = new Stack<>(); maxStack = new Stack<>(); } public void push(int x) { pushHelper(x); } public void pushHelper(int x) { int tempMax = maxStack.isEmpty() ? Integer.MIN_VALUE : maxStack.peek(); if (x > tempMax) { tempMax = x; } stack.push(x); maxStack.push(tempMax); } public int pop() { maxStack.pop(); return stack.pop(); } public int top() { return stack.peek(); } public int peekMax() { return maxStack.peek(); } public int popMax() { int max = maxStack.peek(); Stack<Integer> temp = new Stack<>(); while (stack.peek() != max) { temp.push(stack.pop()); maxStack.pop(); } stack.pop(); maxStack.pop(); while (!temp.isEmpty()) { int x = temp.pop(); pushHelper(x); } return max; } }
posted on 2018-11-06 10:00 猪猪🐷 阅读(144) 评论(0) 收藏 举报
浙公网安备 33010602011771号