Sword to Offer-30 包含min函数的栈 ❀

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

解题思路:

1、对于数据栈dataStack建立一个最小值栈minStack记录其实时最小值;
2、dataStack添加一个新元素时:
(1)查看minStack是否为空,为空表明这是入dataStack栈的第一个元素,此时栈内最小值就是新元素,将其pushminStack
(2)不为空的情况下,新元素与与minStack顶部元素对比,将其中较小的一个pushminStack栈。(顶部元素表示在新元素入栈前,dataStack栈内的最小值);
3、dataStack出栈元素时,minStack也要出栈一个元素;
4、读取栈顶元素和读取最小值函数直接返回dataStackminStack栈顶值即可。

问题图解:

AC代码:

// A Stack With Min Method

import java.util.Stack;

public class Solution {

    private Stack<Integer> dataStack = new Stack<>();
    private Stack<Integer> minStack = new Stack<>();
    
    public void push(int node) {
        dataStack.push(node);
        if (minStack.isEmpty()) {
            minStack.push(node);
        }
        else {
            // 新的最小值要么是原最小值,要么是新添加的值
            if (minStack.peek() < node) {
                minStack.push(minStack.peek());
            }
            else {
                minStack.push(node);
            }
        }
    }
    
    public void pop() {
        dataStack.pop();
        minStack.pop();
    }
    
    public int top() {
        return dataStack.peek();
    }
    
    public int min() {
        return minStack.peek();
    }
}

补充说明:

Comments


yangzail © 2020. All rights reserved.

Powered by Hydejack v8.5.2