logologo

实现一个特殊的栈

Aug 16, 2023

实现一个特殊的栈,在实现基本功能的基础上,再返回栈中最小元素的功能;要求 pop、push、getMin操作的时间复杂度O(1)

C++ 方案一:

struct MyStack{
  stack<int> data;
  stack<int> min;

  void push(int value) {
    if (min.empty() || value <= this->getMin()) {
      min.push(value);
    }
    data.push(value);
  }
  int pop() {
    if (data.empty()) {
      cout << "Your stack is empty!";
      return -1;
    }
    int value = data.top();
    data.pop();
    if (value == this->getMin()) {
      min.pop();
    }
    return value;
  }
  int getMin() {
    if (min.empty()) {
      cout << "Your stack is empty!";
      return -1;
    }

    return min.top();
  }
};

C++ 方案二:

struct MyStack {
  stack<int> data;
  stack<int> min;

  void push(int value) {
    if (min.empty() || value < getMin()) {
      min.push(value);
    } else {
      min.push(min.top());
    }
    data.push(value);
  }

  int pop() {
    if (data.empty()) {
      cout << "Your stack is empty!";
      return -1;
    }
    min.pop();
    int value = data.top();
    data.pop();
    return value;
  }

  int getMin() {
    if (min.empty()) {
      cout << "Your stack is empty!";
      return -1;
    }

    return min.top();
    ;
  }
};

C++Java
浙ICP备2021022773号    2022-PRESENT © ZhengKe