題目描述
定義堆疊的資料結構,請在該型別中實作一個能夠得到堆疊中所含最小元素的min函式(時間復雜度應為O(1)),解題思路:
這個題目我們首先拿到的代碼如下:
# -*- coding:utf-8 -*- class Solution: def push(self, node): #入堆疊 def pop(self): # 出堆疊 def top(self): # 顯示出最top的元素是什么,并不彈出 def min(self): # write code here
一共有三個函式,分別是push,pop,top,min,push代表入堆疊,pop代表出堆疊,top代表堆疊頂的元素是哪一個并列印出來,min代表當前堆疊中最小的元素是哪一個,我們首先完成最基礎的一個堆疊的結構:
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack=[] def push(self, node): #入堆疊 self.stack.append(node) def pop(self): # 出堆疊 if self.stack==[]: return None self.minValue.pop()#和stack一起pop return self.stack.pop() def top(self): # 顯示出最top的元素是什么,并不彈出 if self.stack==[]: return None return self.stack.stack[-1] def min(self): # write code here
我們在函式的自定義層定義了一個stack堆疊的結構,這樣一個最基礎的stack就擁有了所有的屬性,包括壓堆疊,出堆疊等,不過我們怎樣找出一個堆疊當中最小的元素呢?
方法:
# -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack=[] self.minValue=[] def push(self, node): #入堆疊 self.stack.append(node) if self.minValue: #[3,2] node:1 #[3,2,1] #[3,2],node:4 #[3,2,2] #這樣就做到了保持Minvalue的元素個數和stack保持一致,同時增加的都是越來越小的數 if self.minValue[-1]>node: self.minValue.append(node) else: self.minValue.append(self.minValue[-1]) else: self.minValue.append(node) def pop(self): # 出堆疊 if self.stack==[]: return None self.minValue.pop()#和stack一起pop return self.stack.pop() def top(self): # 顯示出最top的元素是什么,并不彈出 if self.stack==[]: return None return self.stack.stack[-1] def min(self): if self.minValue=https://www.cnblogs.com/geeksongs/p/=[]: return None else: return self.minValue[-1] # write code here
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5294.html
標籤:其他
上一篇:嵌入式C-經典筆試題
