【题目描述】
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
【思路】
与数据栈同步建立一个存最小值的栈,每当向数据栈加入一个元素,也要向最小值栈加入一个元素。向最小值栈加入的元素是当前的最小值,只需要将加入的元素与最小值栈栈顶的元素做比较即可。这样可以保证取最小值的时间复杂度为O(1)。
【代码】
C++:
class Solution {
public:
vector<int> stack;
vector<int> min_stack;
void push(int value) {
stack.push_back(value);
int len=min_stack.size();
if(len==0||min_stack[len-1]>value){
min_stack.push_back(value);
}else{
min_stack.push_back(min_stack[len-1]);
}
}
void pop() {
min_stack.pop_back();
return stack.pop_back();
}
int top() {
int ind=stack.size()-1;
return stack[ind];
}
int min() {
int ind=min_stack.size()-1;
return min_stack[ind];
}
};
Python:
# -*- coding:utf-8 -*-
class Solution:
def __init__(self):
self.min_stack=[]
self.stack=[]
def push(self, node):
self.stack.append(node)
if(len(self.min_stack)==0 or node<self.min_stack[-1]):
self.min_stack.append(node)
else:
self.min_stack.append(self.min_stack[-1])
def pop(self):
if(len(self.stack)==0):
return None
self.min_stack.pop(-1)
return self.stack.pop(-1)
def top(self):
if(len(self.stack)==0):
return None
return self.stack[-1]
def min(self):
if(len(self.stack)==0):
return None
return self.min_stack[-1]