leetcode -- 155

155.最小栈

题目描述

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) – 将元素 x 推入栈中。
  • pop() – 删除栈顶的元素。
  • top() – 获取栈顶元素。
  • getMin() – 检索栈中的最小元素。

示例:

MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.

解题方法

两种解法:一种是使用双栈,一种是单栈。下面是单栈的AC代码,参考题解。我自己用base和top指针在push函数里面当出现比最小值还小的值时,需要top++两次,这里一直出现内存错误,改了好久都没解决,最后根据下标来操作了。。。

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 1600

typedef struct {
    int *data;
    int top;
} MinStack;

/** initialize your data structure here. */

MinStack* minStackCreate() 
{
    MinStack *obj=(MinStack *)malloc(sizeof(MinStack));
    obj->data=(int *)malloc(MAXSIZE*sizeof(int));
    obj->top=-1;
    return obj;
}

void minStackPush(MinStack* obj, int x) 
{
  if(obj->top==MAXSIZE-1)
  {    
  }
  else if(obj->top==-1)
  {
      obj->top++;
      obj->data[obj->top]=x;
      obj->top++;
      obj->data[obj->top]=x;
  }
  else
  {
      int tmp=obj->data[obj->top];
      obj->top++;
      obj->data[obj->top]=x;
      if(tmp<x)
      {
        obj->top++;
        obj->data[obj->top]=tmp;
      }
      else
      {
        obj->top++;
        obj->data[obj->top]=x;
      }
  }
}

void minStackPop(MinStack* obj) 
{
  if(obj->top==-1){
      
  }
  else
  {
      obj->top--;
      obj->top--;
  }
}

int minStackTop(MinStack* obj) 
{
  if(obj->top==-1)
  {
      return;
  }
  return obj->data[obj->top-1];
  
}

int minStackGetMin(MinStack* obj) 
{
  return obj->data[obj->top];
}

void minStackFree(MinStack* obj) 
{
    free(obj->data);
    obj->data=NULL;
    free(obj);
    obj=NULL;
}
发布了184 篇原创文章 · 获赞 253 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/williamgavin/article/details/104325524