剑指offer30包含min函数的栈

Posted shiganquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer30包含min函数的栈相关的知识,希望对你有一定的参考价值。

题目

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

思路

能够想到存储最小元素,关键是当最小元素被弹出之后,如何存储次小元素。

我们用一个辅助栈来存储。

1、当压入数字时,如果它比最小的还要小,则在辅助栈和数据栈中都压入该元素;如果它比最小元素大,则在数据栈中压入该数字,在辅助栈就依旧压入最小元素。

2、当弹出数字时,数据栈和辅助栈都弹出

3、当获得min时,直接获得栈顶元素即可

class Solution {
public:
    stack<int> data_stack, min_stack;
    void push(int value) {
        data_stack.push(value);
        if (min_stack.empty())
            min_stack.push(value);
        else{
            int temp = min_stack.top();
            temp>value? min_stack.push(value): min_stack.push(temp);
        }
    }
    void pop() {
        data_stack.pop();
        min_stack.pop();
    }
    int top() {
        return data_stack.top();
    }
    int min() {
        return min_stack.top();
    }
};

 

以上是关于剑指offer30包含min函数的栈的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer30包含min函数的栈

LeetCode(剑指 Offer)- 30. 包含min函数的栈

剑指 Offer 30. 包含min函数的栈

LeetCode(剑指 Offer)- 30. 包含min函数的栈

简洁写法剑指 Offer 30. 包含min函数的栈

简洁写法剑指 Offer 30. 包含min函数的栈