目录
问题描述
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- getMin() -- Retrieve the minimum element in the stack.
设计一个在固定时间内支持push,pop,top和检索最小元素的栈。
- push(x) -- 将元素x推入栈
- pop() -- 删除栈顶元素
- top() -- 得到栈顶元素
- getMin() -- 在栈中检索最小元素
举例说明
Input ["MinStack","push","push","push","getMin","pop","top","getMin"] [[],[-2],[0],[-3],[],[],[],[]] Output [null,null,null,null,-3,null,0,-2] Explanation MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); // return -3 minStack.pop(); minStack.top(); // return 0 minStack.getMin(); // return -2
限制
Methods
pop
,top
andgetMin
operations will always be called on non-empty stacks.
方法pop, top和getMin将由非空栈调用。
一点感想
这道题没啥难的,但我耗得时间很长。原因就是举例中返回的是[null,null,null,null,-3,null,0,-2],我以为就是最后得到的数组长度与方法执行数相等,无形中走偏了方向,还增加了题目难度。麻烦的是null是用于指针,表示不指向任何地址,它套用在整形上等于赋值0,但是0在这个题目中也是可赋值之一,所以就无法区分数组中哪个元素是未初始化哪个元素值是0,那就更不用谈删除栈顶元素了。后来才意识到,题目想要的就是栈,不带null的栈。所以测试下来应该是这样的。
MinStack *minStack = minStackCreate();
minStackPush(minStack,-2);
minStackPush(minStack,0);
minStackPush(minStack,-3);
StringStack(minStack);//toString
printf("%d\n",minStackGetMin(minStack)); // return -3
minStackPop(minStack);
printf("%d\n",minStackTop(minStack)); // return 0
StringStack(minStack);//toString
minStackFree(minStack);
唉,把我蠢得呀