• 如何保证栈的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: 欢迎各位同学分享自己的算法哈。

  • 相关阅读:
    1755:菲波那契数列
    1788:Pell数列
    3089:爬楼梯
    7832:最接近的分数
    7649:我家的门牌号
    7216:Minecraft
    7213:垃圾炸弹
    2983:谁是你的潜在朋友
    2723:因子问题
    2722:和数
  • 原文地址:https://www.cnblogs.com/MarkGrid/p/3143638.html
Copyright © 2020-2023  润新知