加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 综合聚焦 > 编程要点 > 资讯 > 正文

教你快速找到及时序列的最小值

发布时间:2021-05-29 19:17:21 所属栏目:资讯 来源:互联网
导读:推入元素到 mainstack,只有当当前元素小于tmpstack栈顶(实际存储为mainstack中元素索引)元素时,才入栈到tmpstack,入栈的是索引。 假设mainstack当前有n个元素,则tmpstack内元素至多有n个。等于n时,表明原入栈序列为单调递减序列。 出栈分析: 元素从m

推入元素到 mainstack,只有当当前元素小于tmpstack栈顶(实际存储为mainstack中元素索引)元素时,才入栈到tmpstack,入栈的是索引。

假设mainstack当前有n个元素,则tmpstack内元素至多有n个。等于n时,表明原入栈序列为单调递减序列。

出栈分析:

元素从mainstack出栈,但要注意出栈元素索引是否等于tmpstack栈顶,若是需要将tmpstack栈顶元素出栈。可以预知,栈顶索引一定小于等于出栈元素(在mainstack栈内)的索引。

这道题需要注意两点:

临时栈里推送的是主栈的元素索引

push时若临时栈为空,需要先推入此元素在主栈索引

代码

class MinStack(object): 

    def __init__(self): 

 

        """ 

        initialize your data structure here. 

        """ 

        self.mainstack= [] 

        self.tmpstack = [] 

推入元素:

def push(self, val): 

 

    """ 

    :type val: int 

    :rtype: None 

    """ 

 

    self.mainstack.append(val) 

 

    if not self.tmpstack: 

 

        self.tmpstack.append(len(self.mainstack)-1) 

 

    # smaller than top of tmpstack 

    if self.mainstack[self.tmpstack[-1]] > val: 

 

        self.tmpstack.append(len(self.mainstack)-1)  

出栈元素:

def pop(self): 

    """ 

    :rtype: None 

    """ 

 

    # min val of tmp stack equals top of mainstack 

    if self.tmpstack and self.tmpstack[-1] == len(self.mainstack)-1: 

        self.tmpstack.pop() 

 

    return self.mainstack.pop() 

def top(self): 

    """ 

    :rtype: int 

    """ 

 

    if self.mainstack: 

        return self.mainstack[-1] 

使用tmpstack辅助栈,换来了O(1)的查询最小复杂度

def getMin(self): 

    """ 

    :rtype: int 

    """ 

 

    if self.tmpstack: 

        return self.mainstack[self.tmpstack[-1]] 

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读