剑指offer题目20:包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解答思路
遇到这种问题,我的大脑很容易就短路了,因为我想不起来这种题目的前提肯定是空间换取时间的。。也就是肯定是要用额外变量来存储的。
一般人想到的方法肯定是使用一个minNumber来存储最小值的(我比一般人还要渣...),但是问题在于如果栈pop了最小值出来之后,栈中最小值就不是原来的值了,而是次最小值,因此我们还需要额外的空间来存储次最小值。。用到的是栈来存储次最小值。
每次push的时候判断一下是否比原来的最小值要小,是的话则变成最小值,之后的push操作都会添加最小值到最小值栈里面。。pop的时候也是除了两个栈都要pop。。
实现代码
class Solution {
public:
stack<int> minStack;
stack<int> normalStack;
int minNum;
void push(int value) {
if(normalStack.empty()) {
minNum = value;
} else if(value < minNum) {
minNum = value;
}
normalStack.push(value);
minStack.push(minNum);
}
void pop() {
normalStack.pop();
minStack.pop();
}
int top() {
return normalStack.top();
}
int min() {
return minStack.top();
}
};
作者:大傻逼
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号