剑指offer:30.包含min函数的栈

题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 min 函数,输入操作时保证 pop、top 和 min 函数操作时,栈中一定有元素。

此栈包含的方法有:
push(value):将value压入栈中
pop():弹出栈顶元素
top():获取栈顶元素
min():获取栈中最小元素

数据范围:操作数量满足0≤n≤300 ,输入的元素满足|val|≤10000
进阶:栈的各个操作的时间复杂度是O(1),空间复杂度是O(n)

示例:
输入:["PSH-1","PSH2","MIN","TOP","POP","PSH1","TOP","MIN"]
输出:-1,2,1,-1
解析:"PSH-1"表示将-1压入栈中,栈中元素为-1
     "PSH2"表示将2压入栈中,栈中元素为2-1
     "MIN"表示获取此时栈中最小元素==>返回-1
     "TOP"表示获取栈顶元素==>返回2
     "POP"表示弹出栈顶元素,弹出2,栈中元素为-1
     "PSH1"表示将1压入栈中,栈中元素为1-1
     "TOP"表示获取栈顶元素==>返回1
     "MIN"表示获取此时栈中最小元素==>返回-1

我的解法
首先定义一个栈,一个数组,栈的作用是正常执行出栈、入栈、获取栈顶元素,数组的作用是更新当前栈中最小的元素。push(value)方法:首先,若当前栈为空,将value存入数组,执行入栈操作;若不为空,判断入栈元素是否小于等于数组中最后一个元素,若小于等于就将该元素存入数组,否则只执行入栈操作。pop()方法:在栈不为空的前提下,若栈顶元素等于数组中最后一个元素,则删除数组中最后一个元素,执行出栈操作。top()方法:也是在栈顶元素不为空的前提下,执行获取栈顶元素的操作。min()方法:直接返回数组中最后一个元素。

public class topic_2 {
    
    Stack<Integer> stack = new Stack<>();
    Integer[] min = new Integer[300];
    int i = 0;

    public void push(int node) {
        if(stack.isEmpty()){
            min[0] = node;
        } else if(min[i]>=node){
            i ++;
            min[i] = node;
        }
        stack.push(node);
    }                  

    public void pop() {
        if(!stack.isEmpty()){
            if(stack.peek() == min[i])
                i --;    
            stack.pop();
        }
    }
    
    public int top() {
        if(!stack.isEmpty())
            return stack.peek();
        return 10001;
    }
    
    public int min() {
        return min[i];
    }

官方的解法链接:官方讲解与代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值