Fork me on GitHub

【Offer】[30] 【包含min函数的栈】

题目描述

  定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是0(1)。

牛客网刷题地址

思路分析

设置一个辅助栈用来存储每次进栈之后的最小元素

测试用例

  1. 新压入栈的数字比之前的最小值大。
  2. 新压入栈的数字比之前的最小值小。
  3. 弹出栈的数字不是最小元素。
  4. 弹出栈的数字是最小元素。

Java代码

public class Offer30 {

    Stack<Integer> stack_min = new Stack<Integer>();// 存储最小值的辅助栈
    Stack<Integer> stack_data = new Stack<Integer>();// 存储栈中数据

    public void push(int node) {
        stack_data.push(node);

        if (stack_min.isEmpty() || node < stack_min.peek()) {
            stack_min.push(node);
        } else {
            stack_min.push(stack_min.peek());
        }

    }

    public void pop() {
        if (!stack_data.isEmpty()) {
            stack_data.pop();
            stack_min.pop();
        }
    }

    public int top() {
        return stack_data.peek();
    }

    public int min() {
        return stack_min.peek();
    }

}

代码链接

剑指Offer代码-Java

posted @ 2019-08-12 18:00  这个世界~  阅读(111)  评论(0编辑  收藏  举报