美文网首页工作生活
剑指 offer 笔记 19 | 包含min函数的栈

剑指 offer 笔记 19 | 包含min函数的栈

作者: ProudLin | 来源:发表于2019-06-30 13:58 被阅读0次

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

思路分析
用一个栈 data 保存数据,用另外一个栈 min 保存依次入栈最小的数,如图所示,

剑指offer

步骤 1- 6 :
s_data 依次压入: 3 、 4、 2、 1

s_min 依次压入 : 3 、 3、 2、 1

为什么有两个 3 ?因为第二步压入的时候,辅助栈要判断,当前压入的值是否小于栈顶的值,如果小,就继续放入,如果大还是继续放当前栈顶的值,这样一来,辅助里栈顶的值都是当前最小的。

import java.util.Stack;

public class Solution {

    //存放元素
    Stack<Integer> s_data = new Stack<Integer>();
    //存放当前 s_data 中的最小元素
    Stack<Integer> s_min = new Stack<Integer>();
    public void push(int node) {
        s_data.push(node);
        if(s_min.isEmpty() || node < s_min.peek()){
            s_min.push(node);
        }else{
            s_min.push(s_min.peek());
        }
    }
    
    public void pop() {
        if(s_data.size() > 0 && s_min.size() > 0) {
            s_data.pop();
            s_min.pop();
        }
    }
    
    public int top() {
        if(s_data.isEmpty()){
            return 0;
        }
        return s_data.peek();
    }
    
    public int min() {
        if(s_min.isEmpty()){
            return 0;
        }
        return s_min.peek();
    }
}

《剑指 offer》

相关文章

网友评论

    本文标题:剑指 offer 笔记 19 | 包含min函数的栈

    本文链接:https://www.haomeiwen.com/subject/iifbcctx.html