1. 程式人生 > >20.包含min函式的棧-劍指offer-Python2.7

20.包含min函式的棧-劍指offer-Python2.7

題目描述 定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。

思路 引入兩個棧stack和minStack,對於棧stack,每次壓棧實際的數字。對於棧minStack,如果壓棧的數字小於minStack棧頂的數字,則壓棧新的數字,反之,把棧頂的數字再壓入一遍。

Python2.7編寫

# -*- coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack = [] #定義一個空棧,用來正常存放壓棧資料
        self.minStack = [] #用來存放最小值
    def push(self, node):
        #正常壓入棧
        self.stack.append(node)
        #如果存放最小值的棧為空或者當前壓棧數值小於棧中最小值,則壓入儲存最小值的棧中
        if not self.minStack or node < self.min():
            self.minStack.append(node)
        
        else:
            #否則,將棧中的最小值再壓入棧一遍,這麼做是為了保證兩個棧中數的個數相同。方便進行出棧操作。
            self.minStack.append(self.min())
    def pop(self):
        if not self.stack:
            return None
        self.stack.pop()
        self.minStack.pop()
    def top(self):
        return self.stack[-1]
    def min(self):
        return self.minStack[-1]