题目描述

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

分析

贴出代码

import java.util.Stack;
import java.util.Arrays;

public class Solution {

    private int size;
    private int min = Integer.MAX_VALUE;
    private Stack<Integer> minStack = new Stack<Integer>();
    private Integer[] elements = new Integer[10];

    public void push(int node) {
        ensureCapacity(size+1);
        elements[size++] = node;
        if (node <= min){
            minStack.push(node);
            min = minStack.peek();
        }else {
            minStack.push(min);
        }
    }

    private void ensureCapacity(int size ){
        int len = elements.length;
        if(size > len){
            int newLen = (len * 3) / 2 + 1;
            elements = Arrays.copyOf(elements,newLen);
        }
    }

    public void pop() {
        Integer top = top();
        if(top != null){
            elements[size - 1] = (Integer) null;
        }
        size--;
        minStack.pop();
        min = minStack.peek();
    }

    public int top() {
        if(!empty()){
            if(size - 1 >= 0){
                return  elements[size - 1];
            }
        }
        return (Integer) null;
    }

    public boolean empty(){
        return size == 0;
    }

    public int min() {
        return min;
    }
}
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。