码迷,mamicode.com
首页 > 其他好文 > 详细

剑指:包含min函数的栈(min栈)

时间:2019-07-15 14:42:38      阅读:106      评论:0      收藏:0      [点我收藏+]

标签:解法   不为   param   isp   min   img   eve   lse   小数   

题目描述

设计一个支持 push,pop,top 等操作并且可以在 O(1) 时间内检索出最小元素的堆栈。

  • push(x)–将元素x插入栈中
  • pop()–移除栈顶元素
  • top()–得到栈顶元素
  • getMin()–得到栈中最小元素

样例

MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin();   --> Returns -4.
minStack.pop();
minStack.top();      --> Returns 3.
minStack.getMin();   --> Returns -1.

 

 

解法

定义两个stack,一个为存放最小数的序列的辅助栈

压栈时,先将元素 x 压入 stack1。然后判断 stack2 的情况:

  • stack2 栈为空或者栈顶元素大于 x,则将 x 压入 stack2 中。
  • stack2 栈不为空且栈定元素小于 x,则重复压入栈顶元素。

获取最小元素时,从 stack2 中获取栈顶元素即可。

 

import java.util.Stack;

public class MinStack {
    private Stack<Integer> stack1;
    private Stack<Integer> stack2;
    
    public MinStack(){
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }
    
    public void push(int x){
        stack1.push(x);
        if(stack2.isEmpty() || stack2.peek()>x)
            stack2.push(x);
        else
            stack2.push(stack2.peek());
    }
    
    public void pop(){
        stack1.pop();
        stack2.pop();
    }
    
    public int top(){
        return stack1.peek();
    }
    
    public int getMin(){
        return stack2.peek();
    }
}
技术图片
public static void main(String[] args) {
    MinStack obj = new MinStack();
    obj.push(-1);
    obj.push(3);
    obj.push(-4);
    obj.push(0);
    obj.pop();
    int param_3 = obj.top();
    int param_4 = obj.getMin();
    System.out.println(param_3+ " "+param_4);
}
View Code

 

剑指:包含min函数的栈(min栈)

标签:解法   不为   param   isp   min   img   eve   lse   小数   

原文地址:https://www.cnblogs.com/lisen10/p/11188561.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!