最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實現時間o(1)的最小棧的實例代碼

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

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

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

我們的棧內存在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

  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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python Excel實現自動添加編號

    Python Excel實現自動添加編號

    這篇文章主要為大家詳細介紹了如何使用Python在Excel中實現自動添加編號效果,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-03-03
  • 使用Python計算兩個不同列表的相似度

    使用Python計算兩個不同列表的相似度

    這篇文章主要介紹了使用Python計算兩個不同列表的相似度,Python數據開發(fā)工作中的需求兩個不同列表給出相似度,本文實現判斷數字類型相似度和字符串類型相似度,非常實用,需要的朋友可以參考下
    2023-07-07
  • Python網絡編程基于多線程實現多用戶全雙工聊天功能示例

    Python網絡編程基于多線程實現多用戶全雙工聊天功能示例

    這篇文章主要介紹了Python網絡編程基于多線程實現多用戶全雙工聊天功能,結合實例形式分析了Python網絡編程中使用多線程進行多用戶異步通信的原理與相關實現技巧,需要的朋友可以參考下
    2018-04-04
  • OpenCV黑帽運算(BLACKHAT)的使用

    OpenCV黑帽運算(BLACKHAT)的使用

    本文主要介紹了OpenCV黑帽運算(BLACKHAT)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Python遍歷文件夾和讀寫文件的實現代碼

    Python遍歷文件夾和讀寫文件的實現代碼

    這篇文章主要介紹了Python遍歷文件夾和讀寫文件的實現代碼,需要的朋友可以參考下
    2016-08-08
  • python機器學習創(chuàng)建基于規(guī)則聊天機器人過程示例詳解

    python機器學習創(chuàng)建基于規(guī)則聊天機器人過程示例詳解

    這篇文章主要為大家介紹了python實現基于規(guī)則聊天機器人的過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • Python利用Selenium實現自動觀看學習通視頻

    Python利用Selenium實現自動觀看學習通視頻

    Selenium是一個用于Web應用程序測試的工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣。本文主要介紹了利用Selenium實現自動觀看學習通視頻,需要的同學可以參考一下
    2021-12-12
  • 關于Python排序問題(冒泡/選擇/插入)

    關于Python排序問題(冒泡/選擇/插入)

    這篇文章主要介紹了關于Python排序問題(冒泡/選擇/插入),學過C語言肯定接觸過排序問題,我們最常用的也就是冒泡排序、選擇排序、插入排序,需要的朋友可以參考下
    2023-04-04
  • python 基于空間相似度的K-means軌跡聚類的實現

    python 基于空間相似度的K-means軌跡聚類的實現

    這篇文章主要介紹了python 基于空間相似度的K-means軌跡聚類的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 使用PyTorch實現MNIST手寫體識別代碼

    使用PyTorch實現MNIST手寫體識別代碼

    今天小編就為大家分享一篇使用PyTorch實現MNIST手寫體識別代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01

最新評論

瑞金市| 富源县| 祁东县| 长宁区| 辰溪县| 游戏| 盐亭县| 河东区| 咸宁市| 泸定县| 察哈| 怀柔区| 云林县| 潞西市| 普安县| 钟祥市| 东城区| 凤凰县| 从化市| 玉屏| 厦门市| 庄浪县| 梅河口市| 五莲县| 宜兰县| 衡山县| 万年县| 常宁市| 拉萨市| 定襄县| 莱阳市| 平顶山市| 南投县| 临澧县| 织金县| 福海县| 和田县| 黄骅市| 奎屯市| 且末县| 台前县|