一、题目描述:
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。
二、思路分析:
三、代码实现:
C++:
class Solution {
public:
stack<int> s;
void push(int value) {
s.push(value);
}
void pop() {
//空栈
if(s.size() == 0){
return;
}
s.pop();
}
int top() {
if(s.size() == 0){
return NULL;
}
return s.top();
}
int min() {
//遍历栈s中的数据并创建一个临时栈tmp存储数据,寻找min
stack<int> tmp;//创建辅助栈tmp临时存储数据
int min = s.top();//初始化min为栈顶元素
while(!s.empty()){//遍历栈s,寻找min值
if(min > s.top()){
min = s.top();
}
tmp.push(s.top());//将栈s中的元素存放到栈tmp中
s.pop();
}
//此时栈s为空了
while(!tmp.empty()){
s.push(tmp.top());
tmp.pop();
}
//此时栈s不为空了
return min;
}
};
python:
# -*- coding:utf-8 -*-
class Solution:
s = []
def push(self, node):
self.s.append(node)
def pop(self):
if self.s== []:
return
self.s.pop()
def top(self):
if self.s== []:
return None
#return self.s.top()#python中list没有top()函数
return self.s[-1]
def min(self):
tmp = []
min = self.s[-1]
while self.s!= []:
if min > self.s[-1]:
min = self.s[-1];
tmp.append(self.s[-1])
self.s.pop()
while tmp!= []:
self.s.append(tmp[-1])
tmp.pop()
return min