剑指offer--包含min函数的栈(Java)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40244153/article/details/87951246

题目:
   定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
思路:
  定义一个成员变量min来存放最小元素,但是当最小元素弹出后,min就需要相应改变,所以必须把每次的最小值都存储下来。考虑采用一个辅助栈来存放最小值:
    栈  3,4,2,5,1
    辅助栈 3, 3,2,2,1
 ( 压入时,把每次的最小元素(之前最小元素与新入栈元素的较小值)保存起来放到辅助栈中)

考点:举例让抽象问题具体化

实现:

public class Solution {
    Stack<Integer> data = new Stack<>();
    Stack<Integer> minData = new Stack<>();
    public void push(int node) {
        data.push(node);
        if(minData.size()!=0){
            if(node<minData.peek()){
                minData.push(node);
            }else{
                minData.push(minData.peek());
            }
        }else{
            minData.push(node);
        }
    }
    public void pop() {
        if(data.size()!=0){
            data.pop();
            minData.pop();
        }
    }
    public int top() {
        if(data.size()!=0){
            return data.peek();
        }else{
            return -1;
        }
    }
    public int min() {
        if(minData.size()!=0){
            return minData.peek();
        }else{
            return -1;
        }
    }
}

收获:

  1. 要学会这种情况下辅助栈的用法。

猜你喜欢

转载自blog.csdn.net/weixin_40244153/article/details/87951246