問題描述
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);
唉,把我蠢得呀