python實現時間o 1 的最小棧

2022-05-03 04:45:08 字數 1434 閱讀 2201

這是畢業校招二面時遇到的手寫程式設計題,當時剛剛開始學習python,整個棧寫下來也是費了不少時間。畢竟語言只是工具,只要想清楚實現,使用任何語言都能快速的寫出來。

我們的棧內存在stack_list和min_list,min_list負責儲存棧內元素中最小值組成的棧,當新壓棧的元素小於等於棧內最小的元素時,將新元素壓入min_list。如果退棧的元素等於棧內最小的元素,那麼也要將min_list退棧。舉例子,我們依次壓棧3,2,4,1

初始化stack_list =         

min_list =

3壓棧stack_list = [3]

min_list = [3]

2壓棧stack_list = [3, 2]

min_list = [3, 2]

4壓棧stack_list = [3, 2, 4]

min_list = [3, 2]

1壓棧stack_list = [3, 2, 4, 1]

min_list = [3, 2, 1]

get_min只需要返回min_list中最後乙個元素,以下是python**的完整實現

#

!/usr/bin/python

#-*- coding: utf-8 -*-

class

stack(object):

stack_list =

min_list =

min =none

defpush(self, x):

ifnot

self.stack_list:

self.min =x

return

if self.min >=x:

self.min =x

return

defpop(self):

pop_result =none

ifself.stack_list:

pop_result = self.stack_list[-1]

if self.stack_list.pop() ==self.min:

self.min_list.pop()

ifself.min_list:

self.min = self.min_list[-1]

else

: self.min =none

return

pop_result

else

: self.min =none

return

pop_result

defprint_stack(self):

print

"stack---->

", self.stack_list

return

defget_min(self):

return self.min

數字排序 o n 時間 o 1 空間

乙個時間複雜度為o n 空間複雜度為o 1 的排序演算法 收藏 乙個時間複雜度為o n 空間複雜度為o 1 的排序演算法 有n個大小不等的自然數 1 n 請將它們由小到大排序。要求程式演算法 時間複雜度為o n 空間複雜度為o 1 從這道題出題意圖來看,出題者主要是想考面試者的思維是否敏捷清醒 做事...

數字排序 o n 時間 o 1 空間

乙個時間複雜度為o n 空間複雜度為o 1 的排序演算法 收藏 乙個時間複雜度為o n 空間複雜度為o 1 的排序演算法 有n個大小不等的自然數 1 n 請將它們由小到大排序。要求程式演算法 時間複雜度為o n 空間複雜度為o 1 從這道題出題意圖來看,出題者主要是想考面試者的思維是否敏捷清醒 做事...

最小棧O 1 空間複雜度實現

設計乙個支援 push,pop,top 操作,並能在常數時間內檢索到最小元素的棧。push x 將元素 x 推入棧中。pop 刪除棧頂的元素。top 獲取棧頂元素。getmin 檢索棧中的最小元素。常見的一道題目,很多解答都是兩個棧的做法,這裡提供一下o 1 空間複雜度的做法。使用兩個棧的原因是,我...