劍指offer:包含min函數的棧(Python)

題目描述

定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。

# -*- coding:utf-8 -*-
class Solution:
    def push(self, node):
        # write code here
    def pop(self):
        # write code here
    def top(self):
        # write code here
    def min(self):
        # write code here

解題思路

題目要求實現如上四個方法,但是對於Python來說太簡單了,沒有什麼挑戰性,看到Java/C們那一長串的代碼,用Python的我好心虛。。。
回到這道題,入棧出棧函數比較無腦,需要稍微注意一下min函數。因爲實際操作中入棧出棧時動態交替執行,最小值可能被新入棧的更小值替換,也有可能被彈出,導致min值的動態變化。
這裏新建一個棧來存儲當前的最小值:有更小的值入棧時,將其壓入此棧,最小值爲棧頂元素;當位於棧頂的最小值出棧後,此時棧頂的元素就順應稱爲新的最小值。
我看題目要求實現的top()函數定義什麼作用,就偷懶用top()函數返回存儲最小值的棧的棧頂元素了。

Python代碼

import sys
class Solution:
    def __init__(self):
        self.list = []
        self.minStack = [sys.maxsize]

    def push(self, node):
        self.list.append(node)
        if node < self.top():
            self.minStack.append(node)

    def pop(self):
        if self.list:
            popNum = self.list.pop(-1)
            if popNum == self.top():
                self.minStack.pop(-1)
            return popNum
        else:
            return None

    def top(self):
        if self.minStack:
            return self.minStack[-1]
        else:
            return None

    def min(self):
        return self.top()
發佈了85 篇原創文章 · 獲贊 103 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章