国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python實(shí)現(xiàn)時(shí)間o(1)的最小棧的實(shí)例代碼

2020-02-15 22:29:38
字體:
供稿:網(wǎng)友

這是畢業(yè)校招二面時(shí)遇到的手寫編程題,當(dāng)時(shí)剛剛開始學(xué)習(xí)python,整個(gè)棧寫下來也是費(fèi)了不少時(shí)間。畢竟語言只是工具,只要想清楚實(shí)現(xiàn),使用任何語言都能快速的寫出來。

何為最小棧?棧最基礎(chǔ)的操作是壓棧(push)和退棧(pop),現(xiàn)在需要增加一個(gè)返回棧內(nèi)最小值的函數(shù)(get_min),要求get_min函數(shù)的時(shí)間復(fù)雜度為o(1)。python的棧肯定是使用list實(shí)現(xiàn),只要將list的append和pop封裝到stack類中,即實(shí)現(xiàn)了壓棧和退棧。如果不考慮時(shí)間復(fù)雜度,我們第一反應(yīng)一定是min(),min()可以在不開辟新空間的情況下o(n)的返回棧內(nèi)最小值。但是如果棧內(nèi)元素很多,并且get_min方法需要頻繁調(diào)用時(shí),min高耗時(shí)的缺點(diǎn)就被放大,那么理想的方法就是空間換時(shí)間來降低時(shí)間復(fù)雜度。

我們的棧內(nèi)存在stack_list和min_list,min_list負(fù)責(zé)存儲(chǔ)棧內(nèi)元素中最小值組成的棧,當(dāng)新壓棧的元素小于等于棧內(nèi)最小的元素時(shí),將新元素壓入min_list。如果退棧的元素等于棧內(nèi)最小的元素,那么也要將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中最后一個(gè)元素,以下是python代碼的完整實(shí)現(xiàn)

#!/usr/bin/python# -*- coding: utf-8 -*-class stack(object):  stack_list = []  min_list = []  min = None  def push(self, x):    if not self.stack_list:      self.min = x      self.min_list.append(self.min)      self.stack_list.append(x)      return    self.stack_list.append(x)    if self.min >= x:      self.min = x      self.min_list.append(self.min)    return  def pop(self):    pop_result = None    if self.stack_list:      pop_result = self.stack_list[-1]      if self.stack_list.pop() == self.min:        self.min_list.pop()        if self.min_list:          self.min = self.min_list[-1]        else:          self.min = None      return pop_result    else:      self.min = None      return pop_result  def print_stack(self):    print "stack---->", self.stack_list    return  def get_min(self):    return self.min

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林站長站。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宕昌县| 祁门县| 六安市| 青海省| 咸丰县| 格尔木市| 漠河县| 浦城县| 乐亭县| 凤山县| 客服| 扎囊县| 岳西县| 大城县| 淄博市| 佛山市| 大冶市| 博白县| 汝州市| 武宣县| 娱乐| 邵阳县| 同德县| 寿光市| 西峡县| 宝坻区| 淮安市| 资溪县| 北京市| 商洛市| 玛沁县| 府谷县| 兴隆县| 锡林浩特市| 顺义区| 蒙自县| 营口市| 镶黄旗| 大竹县| 故城县| 彩票|