- 题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
- 思路:
- 栈的每一个单元由两个值组成(value, 从栈底到当前位置的min_value)
- pop的时候没有关系,因为直接弹出就可以
- push的时候需要维护栈内的最小值,所以要用当前新进去的value和当前栈里的minvalue取最小,那push进去之后仍旧维护了当前栈内的最小值
- 启发或者坑:
- pop没有返回值,top和getmin有返回值
- 代码
class Solution { stack<int> values; stack<int> minValues; public: void push(int value) { values.push(value); if (minValues.empty()) minValues.push(value); int top = minValues.top(); if (value < top) minValues.push(value); else minValues.push(top); } void pop() { values.pop(); minValues.pop(); } int top() { return values.top(); } int min() { return minValues.top(); } };
剑指offer 21.包含min函数的栈
猜你喜欢
转载自blog.csdn.net/Alexia23/article/details/103842910
今日推荐
周排行