剑指offerNo20. 包含min函数的栈(Java)

题目描述:

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

思路:借用辅助栈,辅助栈保存当前最小的元素,比如放入栈中的数依次是3,4,2,7,5,当放3放入栈的时候,此时最小值就是3,那么辅助栈进入的就是3;当4放入栈的时候,因为3<4,此时,栈中最小的值依旧是4,因此,辅助栈放入的依旧是3(辅助栈的栈顶元素);当2放入栈的时候,此时,栈中最小的元素是2,因此,辅助栈放入的元素是2;当7放入栈的时候,此时,栈中的最小元素是2,因此,放入辅助栈的元素是2。....以此类推

代码:

package offer;
import java.util.Stack;

public class TestNo20 {
    public static void main(String[] args) {
        TestNo20 t = new TestNo20();
        t.push(3);
        t.push(4);
        t.push(2);
        t.push(5);
        t.push(1);
        System.out.println(t.min());
    }
    Stack<Integer> stack1 = new Stack<Integer>(); //用来作为存储栈
    Stack<Integer> stack2 = new Stack<Integer>();//用来作为辅助栈
    public void push(int node) {
        stack1.push(node);
        if(stack2.empty() || node<stack2.peek()){
            stack2.push(node);
        }else{
            stack2.push(stack2.peek());
        }
    }
    public void pop() {
        if(!stack1.empty()){
            stack1.pop();
            stack2.pop();
        }
    }
    public int top() {
        return stack1.peek();

    }
    public int min() {
        return stack2.peek();
    }
}
发布了64 篇原创文章 · 获赞 13 · 访问量 4298

猜你喜欢

转载自blog.csdn.net/qq_40664693/article/details/104364837