要求
- 时间限制:1秒
- 空间限制:32768K
- 热度指数:227391
- 本题知识点: 栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的 m i n min min函数(时间复杂度应为 O ( 1 ) O(1) O(1))。
思路
借助一个辅助栈,辅助栈的
t
o
p
top
top值总是最小值。具体做法如下:
p
u
s
h
push
push方法:
原栈直接入栈;辅助栈仅当当前为空或者入栈的值小于等于辅助栈栈顶的值时入栈。
p
o
p
pop
pop方法:
当原栈不为空时,判断辅助栈与原栈的栈顶值是否相同,若相同则两者同时出栈;若不相同则仅原栈出栈。
t
o
p
top
top方法:
直接返回原栈栈顶值。
m
i
n
min
min方法:
直接返回辅助栈栈顶的值。时间复杂度为
(
O
(
1
)
)
(O(1))
(O(1))。
python实现
# -*- coding:utf-8 -*-
class Solution:
stack = []
stack_temp = []
def push(self, node):
# write code here
self.stack.append(node)
if len(self.stack_temp) == 0:
self.stack_temp.append(node)
elif self.stack_temp[-1]>=self.stack[-1]:
self.stack_temp.append(node)
def pop(self):
# write code here
if len(self.stack)>0:
if self.stack_temp[-1] == self.stack[-1]:
self.stack_temp.pop()
self.stack.pop()
def top(self):
# write code here
return self.stack[-1]
def min(self):
# write code here
return self.stack_temp[-1]
-
运行时间:22ms
-
占用内存:5624k
C++实现
class Solution {
public:
stack<int> st1, st2;
void push(int value) {
st1.push(value);
if (st2.empty())
st2.push(value);
else if (st2.top() >= value)
st2.push(value);
}
void pop() {
if (st1.top() == st2.top())
st2.pop();
st1.pop();
}
int top() {
return st1.top();
}
int min() {
return st2.top();
}
};
- 运行时间:3ms
- 占用内存:464k