這是畢業校招二面時遇到的手寫程式設計題,當時剛剛開始學習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):
"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 空間複雜度的做法。使用兩個棧的原因是,我...