「算法」包含min函数的栈

354 阅读1分钟

0020 包含min函数的栈

题目描述

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

题目地址

解题报告

利用辅助栈

思路:利用一个辅助栈来存放最小值.

JavaSDK中Stack.peek()和Stack.pop()的区别

  • Stack.peek(): peek()函数返回栈顶的元素,但不弹出该栈顶元素。
  • Stack.pop(): pop()函数返回栈顶的元素,并且将该栈顶元素出栈。
import java.util.Stack;
/**
 * 微信公众号"小猿刷题"
 */
public class Solution {
    // 数据栈
    Stack<Integer> stk = new Stack<Integer>();
    // 辅助栈
    Stack<Integer> min = new Stack<Integer>();
    
    public void push(int node) {
        // 当前元素入数据栈
        stk.push(node);
        // 最小栈为空, 压入当前元素
        if(min.isEmpty()){
            min.push(node);
            return;
        } 
        // 当前元素 < 辅助栈栈顶元素, 压入当前元素
        if (node < min.peek()){
            min.push(node);
            return;
        }
    }
    
    public void pop() {
        // 如果两个栈顶元素一致,同时移除.
        if(stk.peek() == min.peek()){
            min.pop();
        } 
        stk.pop();
    }
    
    public int top() {
        return stk.peek();
    }
    
    public int min() {
        return min.peek();
    }
}

小猿刷题