• 155. 最小栈


    155. 最小栈

    难度中等1363收藏分享切换为英文接收动态反馈

    设计一个支持 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 次

    1. public class MinStack {
    2. private final int INIT_SIZE = 100;
    3. private int[] elements;
    4. private int size;
    5. private int min; /* 维护一个最小值 */
    6. private int minCount;
    7. /** initialize your data structure here. */
    8. public MinStack() {
    9. elements = new int[INIT_SIZE];
    10. min = Integer.MAX_VALUE;
    11. }
    12. public void push(int x) {
    13. ensureCapacity(); /* 扩容检测 */
    14. elements[size++] = x;
    15. /* 维护最小值 */
    16. if(x < min) {
    17. min = x;
    18. minCount = 1;
    19. } else if(x == min) {
    20. minCount++;
    21. }
    22. }
    23. public void pop() {
    24. var popNum = elements[--size]; /* 被删除的数 */
    25. /* 维护最小值 */
    26. if(popNum == min && --minCount == 0) {
    27. min = Integer.MAX_VALUE;
    28. for (int i = 0; i < size; i++) {
    29. min = Math.min(min, elements[i]);
    30. }
    31. minCount = 1;
    32. }
    33. }
    34. public int top() {
    35. return elements[size - 1];
    36. }
    37. public int getMin() {
    38. return min; /* 直接返回最小值 */
    39. }
    40. /**
    41. * 是否需要扩容
    42. */
    43. private void ensureCapacity() {
    44. if(size >= elements.length - 1) {
    45. elements = Arrays.copyOf(elements, elements.length + (elements.length >> 1));
    46. }
    47. }
    48. }

     

  • 相关阅读:
    阿里云OSS存储整合若依框架,SpringBoot
    Transformer和DETR笔记
    用Rust开发一个类似SQL Server的数据库系统的步骤和关键技术
    centOS 7 离线安装 MySQL 5.6 完美安装
    嘉一机电告诉你胶球清洗装置好不好用(附安装示意图)
    codeforces 1239D-Catowice City(tarjan缩点)
    LVS负载均衡群集——LVS-NAT模式搭建和LVS-DR模式搭建
    轻量级神经网络算法-总结对比
    在Mac上安装MongoDB 5.0
    Nmap安装和使用详解
  • 原文地址:https://blog.csdn.net/zs391077005/article/details/125990331