剣指offer第20題_min関数を含むスタック_Python
5493 ワード
タイトルの説明スタックのデータ構造を定義する は、スタックに含まれる最小要素を得ることができるmin関数をこのタイプで実現する.時間複雑度はO(1) であるべきである
理解するスタック とはアルゴリズム複雑度 問題を解く構想.
考え方1
拡張リファレンス
理解する
考え方1
class Solution:
def __init__(self):
self.stack = []
self.min_stack = []
def push(self, node):
self.stack.append(node)
if self.min_stack == [] or node <= self.min():
self.min_stack.append(node)
def pop(self):
if self.stack != []:
if self.stack[-1] == self.min_stack[-1]:
self.min_stack.pop()
return self.stack.pop()
def top(self):
return self.stack[-1]
def min(self):
if self.min_stack[-1] != None:
return self.min_stack[-1]
拡張リファレンス
class MinInStack:
def __init__(self):
self.stack = []
#
self.min_stack = []
#
self.length = 0
def isEmpty(self):
#
return self.length == 0
def getLength(self):
#
return self.length
def min(self):
#
if self.isEmpty():
print("Stack is empty!")
return
if self.min_stack:
return self.min_stack[-1]
def push(self, data):
if not isinstance(data, int) and not isinstance(data, float):
print("The element must be numeric!")
return
#
self.stack.append(data)
self.length += 1
#
if self.min_stack == [] or data < self.min():
self.min_stack.append(data)
else:
self.min_stack.append(self.min())
def pop(self):
#
if self.isEmpty():
print("Stack is empty!")
return
data = self.stack.pop()
self.min_stack.pop()
self.length -= 1
return data
def clear(self):
#
self.stack = []
self.min_stack = []
self.length = 0