首页 > 代码库 > 155. Min Stack
155. Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. push(x) -- Push element x onto stack. pop() -- Removes the element on top of the stack. top() -- Get the top element. getMin() -- Retrieve the minimum element in the stack. Example: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
一个站, 一个动态的min, 我的做法, 多个pop 的时候要判空
public class MinStack { int min = 0; private Stack<Integer> s = new Stack<>(); /** initialize your data structure here. */ public MinStack() { s = new Stack<>(); } public void push(int x) { if (s.isEmpty()) { s.push(x); s.push(x); min = x; }else if (x <= min) { min = x; s.push(min); s.push(x); } else { s.push(min); s.push(x); } } public void pop() { if (min == (s.pop())) { s.pop(); if (!s.isEmpty()) { int temp = s.pop(); min = s.pop(); s.push(min); s.push(temp); } } else { min = s.pop(); } } public int top() { return s.peek(); } public int getMin() { if (!s.isEmpty()) { return min; } return 0; } }
这个简洁点, 网上的, 自己的那个就不错
public class MinStack { Stack<Integer> stack; int min=Integer.MAX_VALUE;; /** initialize your data structure here. */ public MinStack() { stack = new Stack<>(); } public void push(int x) { if(x<=min) { stack.push(min); min = x; } stack.push(x); } public void pop() { if(stack.pop() == min) min = stack.pop(); } public int top() { return stack.peek(); } public int getMin() { return min; } }
155. Min Stack
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。