劍指offer 包含min函式的棧

2021-10-03 10:38:57 字數 785 閱讀 8684

題目描述

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

注意:保證測試中不會當棧為空的時候,對棧呼叫pop()或者min()或者top()方法。

要求時間複雜度為o(1),使用乙個輔助棧訪問最小元素

push時當輔助棧棧頂元素小於入棧元素則不入棧,入棧元素小即為當前入棧的最小元素,可以壓入輔助棧

pop時注意如果輔助棧棧頂元素和主棧元素相同,即要將最小元素出棧,所以輔助棧也要同步出棧

呼叫min函式時直接將輔助棧棧頂元素出棧

# -*- coding:utf-8 -*-

class solution:

def __init__(self):

self.stack =

self.mins =

def push(self, node):

if not self.mins:

elif node<=self.min():

def pop(self):

if self.top()==self.min():

self.mins.pop()

self.stack.pop()

def top(self):

if self.stack:

return self.stack[-1]

def min(self):

if self.mins:

return self.mins[-1]

劍指offer 包含min函式的棧

一 問題描述 二 思路 兩個棧,乙個當前棧data,乙個輔助棧m min,輔助棧用來儲存當前的最小值,如果出棧,輔助棧也出棧,棧頂元素始終是當前的最小值。在入棧時,如果輔助棧為空或者當前值小於輔助棧棧頂元素,則將當前值加入輔助棧 否則將輔助棧的棧頂元素加入輔助棧,表明此次有大於min棧頂數字入棧。以...

劍指offer 包含min函式的棧

題目描述 定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。這個題要求時間複雜度是o 1 竟然想了好久沒想出來,原來思維定式了,一直在想既然要從小到大排序怎麼可能實現o 1 呢 其實由於出棧入棧是由順序的,用來記錄最小值的棧也不用完整記錄所有元素的順序,只要根據入棧的順序來就行 ...

劍指offer 包含min函式的棧

定義棧的資料結構,請在該型別中實現乙個能夠得到棧最小元素的min函式。思路 這裡,定義兩個棧,stack和min stack,其中,min stack的最後乙個數永遠保持是stack中最小的乙個數。具體的,在puch時,只儲存比當前最小的還要小的數。pop時,如果stack最小的數pop出,min ...