LeetCode初級算法--設計問題02:最小棧
一、引子
這是由LeetCode官方推出的的經典面試題目清單~
這個模塊對應的是探索的初級算法~旨在幫助入門算法。我們第一遍刷的是leetcode推薦的題目。
二、題目
設計一個支持 push,pop,top 操作,并能在常數時間內檢索到最小元素的棧。
- push(x) -- 將元素 x 推入棧中。
- pop() -- 刪除棧頂的元素。
- top() -- 獲取棧頂元素。
- getMin() -- 檢索棧中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
1、思路
第一種方法:
用列表模擬棧,push、pop、top和getMin分別對應list.append()、list.pop()、list[-1]和min()操作
第二種方法:
引入minStack列表存放最小值
2、編程實現
第一種方法:
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.l = []
def push(self, x):
"""
:type x: int
:rtype: None
"""
if x is None:
pass
else:
self.l.append(x)
def pop(self):
"""
:rtype: None
"""
if self.l is None:
return 'error'
else:
self.l.pop(-1)
def top(self):
"""
:rtype: int
"""
if self.l is None:
return 'error'
else:
return self.l[-1]
def getMin(self):
"""
:rtype: int
"""
if self.l is None:
return 'error'
else:
return min(self.l)
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
第二種方法:
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = [] #存放所有元素
self.minStack = []#存放每一次壓入數據時,棧中的最小值(如果壓入數據的值大于棧中的最小值就不需要重復壓入最小值,小于或者等于棧中最小值則需要壓入)
def push(self, x):
"""
:type x: int
:rtype: void
"""
self.stack.append(x)
if not self.minStack or self.minStack[-1]>=x:
self.minStack.append(x)
def pop(self): #移除棧頂元素時,判斷是否移除棧中最小值
"""
:rtype: void
"""
if self.minStack[-1]==self.stack[-1]:
del self.minStack[-1]
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1]
def getMin(self):
"""
:rtype: int
"""
return self.minStack[-1]
本文由博客一文多發平臺 OpenWrite 發布!
審核編輯 黃昊宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
人工智能
+關注
關注
1791文章
47279瀏覽量
238511 -
機器學習
+關注
關注
66文章
8418瀏覽量
132646 -
深度學習
+關注
關注
73文章
5503瀏覽量
121170 -
leetcode
+關注
關注
0文章
20瀏覽量
2328
發布評論請先 登錄
相關推薦
曙光云開啟全棧智能時代
近日,“全棧可信 云中生智”曙光云戰略發布會召開。曙光云從首創“城市云”進化到實現“全棧智能云”,打造“云智、云安、云算、云數”四位一體能力體系,深度賦能千行百業數智化轉型升級。
常見的lvs負載均衡算法
常見的lvs負載均衡算法包括輪詢(RR)、加權輪詢(WRR)、最小連接(LC)、加權最小連接(WLC)、基于局部性的最少鏈接(LBLC)、帶復制的LBLC(LBLCR)、目標地址散列(DH)、源地址
λ-IO:存儲計算下的IO棧設計
動機和背景? ? 存儲計算存儲資源的充分利用。IO棧是管理存儲器的的基本組件,包括設備驅動、塊接口層、文件系統,目前一些用戶空間IO庫(如SPDK)有效降低了延遲,但是io棧仍然不可或缺。這是因為1
RVBacktrace RISC-V極簡棧回溯組件
RVBacktrace組件簡介一個極簡的RISC-V棧回溯組件。功能在需要的地方調用組件提供的唯一API,開始當前環境的棧回溯支持輸出addr2line需要的命令,使用addr2line進行棧回溯支持結合反匯編,棧回溯信息圖表化
Linux網絡協議棧的實現
網絡協議棧是操作系統核心的一個重要組成部分,負責管理網絡通信中的數據包處理。在 Linux 操作系統中,網絡協議棧(Network Stack)負責實現 TCP/IP 協議簇,處理應用程序發起的網絡
物聯數據棧網關是什么?
物聯數據棧網關就是物聯網智能網關。 物聯數據棧網關是物聯網架構中的重要組件之一。它是連接物聯網設備和云平臺的中間設備,負責將物聯網設備采集到的數據傳輸到云平臺,并將云平臺下發的指令傳輸給物聯網設備
ethernetif_input和tcpip協議棧線程的作用
tcpip協議棧線程是lwIP協議棧的核心線程,負責處理TCP/IP協議棧的各種功能,包括TCP連接管理、IP數據報的路由和轉發、以及UDP數據包的處理等。
初級線圈和次級線圈電流關系
在電磁學和電工學中,初級線圈和次級線圈是經常被用到的概念。初級線圈通常指的是提供電源的線圈,而次級線圈則指的是從初級線圈中導出的線圈。初級線圈和次級線圈之間存在一定的電流關系,本文將詳
四路2輸入NOR門74HC02; 74HCT02數據手冊
電子發燒友網站提供《四路2輸入NOR門74HC02; 74HCT02數據手冊.pdf》資料免費下載
發表于 02-21 10:57
?0次下載
四路2輸入NOR門74AHC02; 74AHCT02數據手冊
電子發燒友網站提供《四路2輸入NOR門74AHC02; 74AHCT02數據手冊.pdf》資料免費下載
發表于 02-19 14:29
?0次下載
堆和棧的區別和使用注意事項
堆和棧是在計算機科學中廣泛使用的兩種數據結構,它們具有不同的用途和特點。堆和棧的區別涉及到內存分配、訪問方式、數據存儲等方面。在使用堆和棧時,還需要注意一些細節,以確保程序的正確性和效率。本文將詳細
評論