成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在O(1)內找到實時序列的最小值?

開發 前端
最小棧,能在O(1)內找到棧內序列的最小值,因此此特性經常用于提升算法性能。下面看看它的一種實現。

最小棧

最小棧,能在O(1)內找到棧內序列的最小值,因此此特性經常用于提升算法性能。下面看看它的一種實現。

[[395237]]

分析過程

入棧分析:

推入元素到 mainstack,只有當當前元素小于tmpstack棧頂(實際存儲為mainstack中元素索引)元素時,才入棧到tmpstack,入棧的是索引。

假設mainstack當前有n個元素,則tmpstack內元素至多有n個。等于n時,表明原入棧序列為單調遞減序列。

出棧分析:

元素從mainstack出棧,但要注意出棧元素索引是否等于tmpstack棧頂,若是需要將tmpstack棧頂元素出棧。可以預知,棧頂索引一定小于等于出棧元素(在mainstack棧內)的索引。

這道題需要注意兩點:

  • 臨時棧里推送的是主棧的元素索引
  • push時若臨時棧為空,需要先推入此元素在主棧索引

代碼

  1. class MinStack(object): 
  2.     def __init__(self): 
  3.  
  4.         """ 
  5.         initialize your data structure here. 
  6.         """ 
  7.         self.mainstack= [] 
  8.         self.tmpstack = [] 

推入元素:

  1. def push(self, val): 
  2.  
  3.     """ 
  4.     :type val: int 
  5.     :rtype: None 
  6.     """ 
  7.  
  8.     self.mainstack.append(val) 
  9.  
  10.     if not self.tmpstack: 
  11.  
  12.         self.tmpstack.append(len(self.mainstack)-1) 
  13.  
  14.     # smaller than top of tmpstack 
  15.     if self.mainstack[self.tmpstack[-1]] > val: 
  16.  
  17.         self.tmpstack.append(len(self.mainstack)-1)  

出棧元素:

  1. def pop(self): 
  2.     """ 
  3.     :rtype: None 
  4.     """ 
  5.  
  6.     # min val of tmp stack equals top of mainstack 
  7.     if self.tmpstack and self.tmpstack[-1] == len(self.mainstack)-1: 
  8.         self.tmpstack.pop() 
  9.  
  10.     return self.mainstack.pop() 
  1. def top(self): 
  2.     """ 
  3.     :rtype: int 
  4.     """ 
  5.  
  6.     if self.mainstack: 
  7.         return self.mainstack[-1] 

使用tmpstack輔助棧,換來了O(1)的查詢最小復雜度

  1. def getMin(self): 
  2.     """ 
  3.     :rtype: int 
  4.     """ 
  5.  
  6.     if self.tmpstack: 
  7.         return self.mainstack[self.tmpstack[-1]] 

 

責任編輯:趙寧寧 來源: Python與算法社區
相關推薦

2020-10-13 08:53:04

算法最小值

2010-09-26 16:12:57

SQL查詢

2010-09-26 15:56:59

SQL查詢

2009-09-17 09:50:34

數組

2010-05-27 14:27:30

MySQL全文索引

2017-07-03 10:52:20

深度學習人工智能

2010-10-12 14:27:57

mysql全文索引

2022-04-06 09:28:04

漏洞SQL注入

2010-11-24 16:42:40

mysql命令行求最小

2019-01-08 15:11:50

最大值最小值算法

2021-05-09 22:41:43

Python數據統計

2020-05-22 11:16:49

云安全云計算

2018-05-28 11:10:08

Linux命令IP地址

2019-02-26 10:15:13

GitHub 開源代碼

2020-10-12 11:16:32

數組特定值元素

2021-02-03 10:43:54

Linux系統磁盤

2023-11-16 08:00:00

Datadog部署實時監控

2020-10-16 15:27:04

面試算法

2018-03-01 09:46:11

游戲實時語音

2020-04-08 10:42:14

多云云計算云開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 五月免费视频 | 日本午夜免费福利视频 | 久久久福利 | 久久久久九九九女人毛片 | 玖玖视频免费 | 精品中文字幕一区二区三区 | aaaaaaa片毛片免费观看 | 337p日本欧洲亚洲大胆 | 日韩在线一区二区 | 在线视频 欧美日韩 | 国产成人一区在线 | 日韩综合在线视频 | 午夜激情视频 | 日韩不卡视频在线观看 | 天堂av中文在线 | 国产精品国产三级国产aⅴ中文 | 国产精品久久久久久久久久 | 精品无码久久久久久国产 | 99久久久久 | 午夜精品影院 | 91人人看| 久久99精品久久久久 | 成人亚洲一区 | 国产精品成人一区二区三区吃奶 | 国产精品免费视频一区 | 国产精品久久久久一区二区三区 | 91久久北条麻妃一区二区三区 | 91久久久久 | 国产精品一区二 | 久久久成人免费视频 | 成人免费大片黄在线播放 | 久久久精品网站 | 国产精品免费视频一区 | www.亚洲视频 | 在线观看国产视频 | 免费在线看黄视频 | 九九九久久国产免费 | 欧美爱爱视频 | 中文字幕亚洲欧美日韩在线不卡 | 麻豆视频在线免费看 | 色综合一区二区 |