成人免费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查詢

2009-09-17 09:50:34

數組

2010-09-26 15:56:59

SQL查詢

2022-04-06 09:28:04

漏洞SQL注入

2010-05-27 14:27:30

MySQL全文索引

2017-07-03 10:52:20

深度學習人工智能

2010-10-12 14:27:57

mysql全文索引

2010-11-24 16:42:40

mysql命令行求最小

2019-01-08 15:11:50

最大值最小值算法

2020-05-22 11:16:49

云安全云計算

2018-05-28 11:10:08

Linux命令IP地址

2019-02-26 10:15:13

GitHub 開源代碼

2021-05-09 22:41:43

Python數據統計

2023-11-16 08:00:00

Datadog部署實時監控

2020-10-12 11:16:32

數組特定值元素

2021-02-03 10:43:54

Linux系統磁盤

2020-04-08 10:42:14

多云云計算云開發

2021-06-14 09:26:46

VMwareHCI數據中心

2021-08-30 13:08:54

Linux實時監控日志文件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产91 | 成人黄色电影在线观看 | 欧美精品久久 | 日韩欧美三区 | 毛片.com| 亚洲精品视频在线看 | 四虎永久免费地址 | 亚洲444eee在线观看 | 狠狠操av| 国产丝袜一区二区三区免费视频 | 日本在线免费视频 | 久久久久国产一级毛片 | 很黄很污的网站 | www.99热这里只有精品 | 一区二区中文字幕 | 91在线视频在线观看 | 午夜在线影院 | 看av片网站 | 成人精品一区二区三区四区 | 成人在线观看网站 | 日韩a| 日韩免费毛片视频 | 久久草视频 | 日韩欧美成人一区二区三区 | 狠狠草视频 | 午夜精品久久久久久久久久久久久 | 精品一区二区三区四区 | 久久999| 亚洲成人福利 | 亚洲成人精 | 九九热这里只有精品6 | 91精品国产欧美一区二区 | 欧美综合一区二区三区 | 日韩欧美三区 | 精品视频在线播放 | 久久99精品久久久久久噜噜 | 91麻豆产精品久久久久久夏晴子 | 久久黄色网 | 久草网址| 大吊一区二区 | 日屁视频 |