描述:
实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。
示例1
输入:
[[1,3],[1,2],[1,1],[3],[2],[3]]
三种操作,op1表示push,op2表示pop,op3表示getMin
返回值:
[1,2]
(题目来自牛客网)
用C++实现如下
class Solution {
public:
/**
* return a array which include all ans for op3
* @param op int整型vector<vector<>> operator
* @return int整型vector
*/
//定义两个stack用于存数据
stack<int> all; //一个用于存所有数据
stack<int> goal; //一个用于存目标数据
vector<int> getMinStack(vector<vector<int>>& op) {
if(op.size()<=0){ //先判断异常情况,size<=0;
return {};
}
vector<int> results; //用于存放输出的结果,与op[0]=3的数量一致;
for(auto it:op){
if(it[0]==1){ //等于1,push进去,记得是存最小的
Push(it[1]);
}else if(it[0]==2){ //等于2,pop操作,当最小值的top和all的top相等时,也要弹出
Pop();
}else{
results.push_back(getMin()); //等于3,取最小值
}
}
return results;
}
//实现Push操作!
void Push(int x){
all.push(x);
if(goal.empty()||goal.top()>=x){
goal.push(x);
}
}
//实现Pop操作!
void Pop(){
if(!all.empty()){
if(goal.top()==all.top()){
goal.pop();
}
all.pop();
}
}
实现getMin操作!
int getMin(){
return goal.top();
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!