赞
踩
感谢耶稣,笔者又过了一天“复活节”。月末斩杀一道Hard画上句号
题型:栈、模拟数据结构
来源:LeetCode
设计一个支持 push
,pop
,top
操作,并能在常数时间内检索到最小元素的栈。
实现 MinStack
类:
MinStack()
初始化堆栈对象。void push(int val)
将元素val推入堆栈。void pop()
删除堆栈顶部的元素。int top()
获取堆栈顶部的元素。int getMin()
获取堆栈中的最小元素。示例 1:
输入: ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]] 输出: [null,null,null,null,-3,null,0,-2] 解释: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2.
提示:
-231 <= val <= 231 - 1
pop
、top
和 getMin
操作总是在 非空栈 上调用push
, pop
, top
, and getMin
最多被调用 3 * 104
笔者用了两个栈,一个处理数值val,一个处理最小值
明天细说(感谢耶稣)
- class MinStack {
- private:
- stack<int> sup_stack;//辅助栈,负责存数值
- stack<int> min_stack;//“最小栈”用的栈结构,负责存当前的最小值
- public:
- MinStack() {
- // 这个是最小栈的构造函数
- min_stack.push(INT_MAX);//这样当栈为空时,就可以将val放进来
- }
- // 相当于是重写了栈的函数
- void push(int val) {
- sup_stack.push(val);
- //看栈顶元素 和 将要进来的元素哪个小,存入更小的那一个(保持栈顶元素一直最小)
- min_stack.push(min(val,min_stack.top()));
- }
-
- void pop() {
- sup_stack.pop();
- min_stack.pop();
- }
-
- int top() {
- return sup_stack.top();
- }
-
- int getMin() {
- return min_stack.top();
- }
- };
-
- /**
- * Your MinStack object will be instantiated and called as such:
- * MinStack* obj = new MinStack();
- * obj->push(val);
- * obj->pop();
- * int param_3 = obj->top();
- * int param_4 = obj->getMin();
- */
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。