题目链接: leetcode.
本以为是个简单题我指定能行。。。
结果
error: cannot use dot operator on a type
想在函数里面用变量,,是要把变量定义到class下面的
还试图用一个int对象表示最小值
应该用一个栈来存放当前最小值,当最小值弹出时栈也弹出, 最小栈顶变成次小值
/*
执行用时:32 ms, 在所有 C++ 提交中击败了63.14%的用户
内存消耗:14.6 MB, 在所有 C++ 提交中击败了92.00%的用户
*/
class MinStack {
public:
/** initialize your data structure here. */
stack<int> s;
stack<int> s_min;
MinStack() {
s_min.push(INT_MAX);//减少s为空时的判断操作
}
void push(int x) {
s.push(x);
if(x <= s_min.top())//等于号,可能会有元素相同的情况
s_min.push(x);
}
void pop() {
int topp = s.top();
s.pop();
if(topp == s_min.top())
s_min.pop();
}
int top() {
return s.top();
}
int min() {
return s_min.top();
}
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->min();
*/
这道LeetCode题目要求在栈中实现min功能。初看简单,实则需要注意变量的作用域和如何保持最小值的实时更新。正确解法是使用两个栈,一个存放所有元素,另一个用于跟踪最小值。当弹出元素时,若该元素是最小值,则两个栈同时弹出,确保最小值栈始终保持当前最小值。
354

被折叠的 条评论
为什么被折叠?



