剑指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函数的栈的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode(剑指 Offer)- 30. 包含min函数的栈