原题:
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.
Example:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
代码如下:
typedef struct {
int* intStack;
int top;
int max;
} MinStack;
/** initialize your data structure here. */
MinStack* minStackCreate(int maxSize) {
MinStack* testStack;
testStack=(MinStack*)malloc(sizeof(MinStack));
testStack->top=-1;
testStack->max=maxSize;
testStack->intStack=(int*)malloc(sizeof(int)*maxSize);
return testStack;
}
void minStackPush(MinStack* obj, int x) {
obj->top+=1;
*(obj->intStack+obj->top)=x;
}
void minStackPop(MinStack* obj) {
obj->top-=1;
}
int minStackTop(MinStack* obj) {
return *(obj->intStack+obj->top);
}
int minStackGetMin(MinStack* obj) {
int min=INT_MAX;
for(int n=0;n<=obj->top;n++)
{
if(*(obj->intStack+n)<min)
{
min=*(obj->intStack+n);
}
}
return min;
}
void minStackFree(MinStack* obj) {
free(obj->intStack);
free(obj);
}
/**
* Your MinStack struct will be instantiated and called as such:
* struct MinStack* obj = minStackCreate(maxSize);
* minStackPush(obj, x);
* minStackPop(obj);
* int param_3 = minStackTop(obj);
* int param_4 = minStackGetMin(obj);
* minStackFree(obj);
*/
最近公司好忙,感觉都没有经历来码代码玩了~
上面这个玩意。。。 我觉得但凡了解栈概念的应该都没有什么难度的吧。