zoukankan      html  css  js  c++  java
  • 如何保证栈的pop/push/get_min的效率同时满足是O(1)?

    注:get_min为最小值,是动态的,也就是说,每次的pop或push都取的是当前栈内元素的最小值。

    解决方案:

    设置两个栈,一个为原始数据栈S1,一个为最小值栈S2。

    push操作 -- 复杂度为O(1):

    开始时,push数据D1到S1,同时对比S2中的栈顶元素TD2,只有D1<topdata时才将D1 push到S2;

    接着push其他数据Dn...

    pop操作 -- 复杂度为O(1):

    每次pop S1时(假设为TD1),先与S2的TD1比较,只有TD1<=TD2时,将TD2从S2中pop;

    get_min -- 复杂度为O(1):

    直接pop S2的栈顶元素TD2即为S1的当前最小值。

    当然,这里的S2也可以是一个数组。

    BTW: 欢迎各位同学分享自己的算法哈。

  • 相关阅读:
    采样错误
    MathJax
    jupyter
    pip
    str操作
    Content-Type
    json转csv
    【tornado】静态文件
    dict 字典
    基于插件技术的GIS应用框架(C# + ArcEngine9.3)(一)
  • 原文地址:https://www.cnblogs.com/MarkGrid/p/3143638.html
Copyright © 2011-2022 走看看