包含 min 函数的栈


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


自定义符合题意的数据结构,当然要考虑使用的现有数据结构来构造。可以使用两个栈来实现题目的要求。

栈一用来正常存放数据,栈二则负责记录最小值。每次有新数据入栈时,先和栈二的最顶层元素比较,如果小于最顶层元素,栈一栈二同时压入新值;否则栈一压入新值,栈二压入当前其顶层元素的值。

每次出栈时,栈一栈二同时将数据出栈,栈一是正常存放数据的,自然不用多说;栈二的最顶层数据一定是最小的,每次出栈也同时弹出栈顶元素。

import java.util.Stack;

public class Solution {

    private Stack<Integer> stack1 = new Stack<>();
    private Stack<Integer> stack2 = new Stack<>();
    
    public void push(int node) {
        stack1.push(node);
        if(stack2.empty()) {
            stack2.push(node);
        }
        if(node <= stack2.peek()) {
            stack2.push(node);
        } else {
            stack2.push(stack2.peek());
        }
    }
    
    public void pop() {
        stack1.pop();
        stack2.pop();
    }
    
    public int top() {
        return stack1.peek();
    }
    
    public int min() {
        return stack2.peek();
    }
}

原文地址:https://www.cnblogs.com/Yee-Q/p/13777055.html