包含min函数的栈(用辅助栈和不用辅助栈两种写法 java实现)

  • 问题描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。

  • 解决方案1

利用一个辅助栈来存储最小值,入栈和出栈时同时维护辅助栈,代码如下:

import java.util.Stack;

public class Solution {

    Stack<Integer> stack = new Stack<Integer>();
    Stack<Integer> helpStack = new Stack<Integer>();
    public void push(int node) {
        stack.push(node);
        if(helpStack.isEmpty() || helpStack.peek() > node)
            helpStack.push(node);
    }
    
    public void pop() {
        int node = stack.pop();
        if(node == helpStack.peek() && (stack.isEmpty() || node != stack.peek()))
            helpStack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int min() {
        return helpStack.peek();
    }
}
  • 解决方案2

不用辅助栈来做,设定一个变量来保存最小值min,入栈时压入元素node-min,如果压入的元素小于最小值min,则将最小值更新为node;
弹出元素时,如果弹出的元素为负数,则将最小值更新为min - node。代码如下:

import java.util.Stack;

public class Solution {

    Stack<Integer> stack = new Stack<>();
    Integer min = null;
    public void push(int node) {
        if(min == null){
            min = node;
            stack.push(0);
        }
        else{
            stack.push(node - min);
            if(node < min)
               min = node;
        } 
    }
    
    public void pop() {
        int node = stack.pop();
        if(node < 0)
            min = min - node;
    }
    
    public int top() {
        int node = stack.peek();
        if(node < 0)
            return min;
        else
            return node + min;
    }
    
    public int min() {
        return min;
    }
}
展开阅读全文
©️2020 CSDN 皮肤主题: 黑客帝国 设计师: 上身试试 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值