题目描述
- 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)。
算法分析
- 使用两个栈,一个栈用来存储数据,另一个栈用来存储对应数据的最小值;
提交代码:
class Solution {
public:
void push(int value) {
if (minVal.empty() || value < minVal.top())
minVal.push(value);
else
minVal.push(minVal.top());
stackVal.push(value);
}
void pop() {
stackVal.pop();
minVal.pop();
}
int top() {
return stackVal.top();
}
int min() {
return minVal.top();
}
private:
stack<int> stackVal;
stack<int> minVal;
};
测试代码:
// ====================测试代码====================
void Test(const char* testName, Solution stack, int expected)
{
if (testName != nullptr)
printf("%s begins: ", testName);
if (stack.min() == expected)
printf("Passed.\n");
else
printf("Failed.\n");
}
int main(int argc, char* argv[])
{
Solution stack;
stack.push(3);
Test("Test1", stack, 3);
stack.push(4);
Test("Test2", stack, 3);
stack.push(2);
Test("Test3", stack, 2);
stack.push(3);
Test("Test4", stack, 2);
stack.pop();
Test("Test5", stack, 2);
stack.pop();
Test("Test6", stack, 3);
stack.pop();
Test("Test7", stack, 3);
stack.push(0);
Test("Test8", stack, 0);
return 0;
}