您的位置:首页 > 职场人生

Java - 剑指offer_面试题21_包含min函数的栈

2017-05-04 09:46 351 查看
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小最小元素的min函数。在该栈中,调用min、push 及 pop的时间复杂度都是O(1)。

本题关键问题在于:O(1)时间复杂度的 min 函数。

即无论占中元素如何变化。都要在 O(1)内知道最小值。

因此,需要设置两个栈:

1、数据栈,用于数据的压入和弹出

2、辅助栈,存入与数据栈中相对应的最小元素

即 数据栈每压入一个元素,辅助栈压入当时数据栈内所有元素的最小值;弹出数据栈元素时,也相应的弹出辅助栈内的min元素,保持辅助栈的栈顶元素永远是 数据栈元素的最小值。

在解决问题时,可以 举例 帮助自己思考。

[java] view
plain copy

import java.util.Stack;  

   

public class Solution {  

    Stack<Integer> stack = new Stack<>();  

    Stack<Integer> minStack = new Stack<>();  

   

    public void push(int node) {  

        stack.push(node);  

        if (minStack.isEmpty()) {  

            minStack.push(node);  

        } else {  

            minStack.push(Math.min(node, minStack.peek()));  

        }  

    }  

   

    public void pop() {  

        if (!stack.isEmpty()) {  

            stack.pop();  

            minStack.pop();  

        }  

    }  

   

    public int top() {  

        return stack.peek();  

    }  

   

    public int min() {  

        if (minStack.isEmpty())  

            return Integer.MIN_VALUE;  

        return minStack.peek();  

    }  

}  

通过这道题学习了:

1、举实例一步步分析,对问题的分析,有很大帮助

2、认识到了几个薄弱点:模板类的使用,虚析构函数的理解,常成员函数的理解 以及 系统库的有效利用(并不需要自己 从头定义栈)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: