当前位置:   article > 正文

稀碎从零算法笔记Day34-LeetCode:最小栈

稀碎从零算法笔记Day34-LeetCode:最小栈

感谢耶稣,笔者又过了一天“复活节”。月末斩杀一道Hard画上句号

题型:栈、模拟数据结构

链接:155. 最小栈 - 力扣(LeetCode)

来源: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
  • poptop 和 getMin 操作总是在 非空栈 上调用
  • pushpoptop, and getMin最多被调用 3 * 104

题目思路

笔者用了两个栈,一个处理数值val,一个处理最小值

明天细说(感谢耶稣)

C++代码

  1. class MinStack {
  2. private:
  3. stack<int> sup_stack;//辅助栈,负责存数值
  4. stack<int> min_stack;//“最小栈”用的栈结构,负责存当前的最小值
  5. public:
  6. MinStack() {
  7. // 这个是最小栈的构造函数
  8. min_stack.push(INT_MAX);//这样当栈为空时,就可以将val放进来
  9. }
  10. // 相当于是重写了栈的函数
  11. void push(int val) {
  12. sup_stack.push(val);
  13. //看栈顶元素 和 将要进来的元素哪个小,存入更小的那一个(保持栈顶元素一直最小)
  14. min_stack.push(min(val,min_stack.top()));
  15. }
  16. void pop() {
  17. sup_stack.pop();
  18. min_stack.pop();
  19. }
  20. int top() {
  21. return sup_stack.top();
  22. }
  23. int getMin() {
  24. return min_stack.top();
  25. }
  26. };
  27. /**
  28. * Your MinStack object will be instantiated and called as such:
  29. * MinStack* obj = new MinStack();
  30. * obj->push(val);
  31. * obj->pop();
  32. * int param_3 = obj->top();
  33. * int param_4 = obj->getMin();
  34. */

结算页面

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/344460
推荐阅读
相关标签
  

闽ICP备14008679号