亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2018年07月23日 09:41:18   作者:熔遁丶螺旋手里劍  
這篇文章主要介紹了python實(shí)現(xiàn)時間o(1)的最小棧的實(shí)例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

我們的棧內(nèi)存在stack_list和min_list,min_list負(fù)責(zé)存儲棧內(nèi)元素中最小值組成的棧,當(dāng)新壓棧的元素小于等于棧內(nèi)最小的元素時,將新元素壓入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中最后一個元素,以下是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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • django admin管理工具自定義時間區(qū)間篩選器DateRangeFilter介紹

    django admin管理工具自定義時間區(qū)間篩選器DateRangeFilter介紹

    這篇文章主要介紹了django admin管理工具自定義時間區(qū)間篩選器DateRangeFilter介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 在k8s上部署pytorch分布式程序的完整步驟記錄

    在k8s上部署pytorch分布式程序的完整步驟記錄

    Kubernetes的核心優(yōu)勢在于其能夠提供一個可擴(kuò)展、靈活且高度可配置的平臺,使得應(yīng)用程序的部署、擴(kuò)展和管理變得前所未有的簡單下面這篇文章主要給大家介紹了關(guān)于在k8s上部署pytorch分布式程序的完整步驟,需要的朋友可以參考下
    2024-08-08
  • Python之列表實(shí)現(xiàn)棧的工作功能

    Python之列表實(shí)現(xiàn)棧的工作功能

    今天小編就為大家分享一篇關(guān)于Python之列表實(shí)現(xiàn)棧的工作功能,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • python讀寫二進(jìn)制文件的方法

    python讀寫二進(jìn)制文件的方法

    這篇文章主要介紹了python讀寫二進(jìn)制文件的方法,實(shí)例分析了Python讀寫二進(jìn)制文件的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • python 發(fā)送和接收ActiveMQ消息的實(shí)例

    python 發(fā)送和接收ActiveMQ消息的實(shí)例

    今天小編就為大家分享一篇python 發(fā)送和接收ActiveMQ消息的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python web框架 django wsgi原理解析

    python web框架 django wsgi原理解析

    這篇文章主要介紹了python web框架 django wsgi原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值
    2019-08-08
  • Django 聯(lián)表查詢操作方法

    Django 聯(lián)表查詢操作方法

    作為一個django使用的新手,在做練手項(xiàng)目中對聯(lián)表查詢感覺比較生疏,最近兩天整理了一些連表查詢應(yīng)用場景和使用方法以及無法使用django中ORM操作的原生查詢,對Django 聯(lián)表查詢操作感興趣的朋友跟隨小編一起看看吧
    2023-09-09
  • 詳解Python中常用的激活函數(shù)(Sigmoid、Tanh、ReLU等)

    詳解Python中常用的激活函數(shù)(Sigmoid、Tanh、ReLU等)

    激活函數(shù) (Activation functions) 對于人工神經(jīng)網(wǎng)絡(luò)模型去學(xué)習(xí)、理解非常復(fù)雜和非線性的函數(shù)來說具有十分重要的作用,這篇文章主要介紹了Python中常用的激活函數(shù)(Sigmoid、Tanh、ReLU等),需要的朋友可以參考下
    2023-04-04
  • Python 迭代,for...in遍歷,迭代原理與應(yīng)用示例

    Python 迭代,for...in遍歷,迭代原理與應(yīng)用示例

    這篇文章主要介紹了Python 迭代,for...in遍歷,迭代原理與應(yīng)用,結(jié)合實(shí)例形式分析了Python迭代與遍歷的相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • Matplotlib自定義圖例(多張圖共享一個圖例)

    Matplotlib自定義圖例(多張圖共享一個圖例)

    最近再用Matplotlib繪圖,需要做兩個子圖都不需要設(shè)置圖例,圖例單獨(dú)用一個figure來顯示,本文就詳細(xì)的來介紹一下,感興趣的可以了解一下
    2023-08-08

最新評論