C++ Python 包含min函数的栈

**

以下为C++版本

**
设计一个栈,支持如下操作,
push(x), top(), pop(),
getMin(): 返回栈内最小元素
这些操作的算法复杂度需要是常数级,O(1)
1个变量MIN无法完成记录栈中所有状态下的最小值。
栈的每个状态,都需要一个变量记录最小值。

#include<stdio.h>
#include<stack>
class MinStack
{
private:
 std::stack<int> _data;
 std::stack<int> _min;
public:
 MinStack(){}
 void push(int x)
 {
  _data.push(x);
  if (_min.empty())
  {
   _min.push(x);
  }
  else
  {
   if (x >= _min.top())
   {
    x = _min.top();
   }
   _min.push(x);
  }
 }
 void pop()
 {
  _data.pop();
  _min.pop();
 }
 int top()
 {
  return _data.top();
 }
 int getMin()
 {
  return _min.top();
 }
};

int main()
{
 MinStack minstack;
 minstack.push(-2);
 printf("top = [%d]\n", minstack.top());
 printf("min=[%d]\n\n", minstack.getMin());
 minstack.push(0);
 printf("top = [%d]\n", minstack.top());
 printf("min=[%d]\n\n", minstack.getMin());
 minstack.push(-5);
 printf("top = [%d]\n", minstack.top());
 printf("min=[%d]\n\n", minstack.getMin());
 minstack.pop();
 printf("top = [%d]\n", minstack.top());
 printf("min=[%d]\n\n", minstack.getMin());
 return 0;
}

运行结果如下:
top = [-2]
min=[-2]

top = [0]
min=[-2]

top = [-5]
min=[-5]

top = [0]
min=[-2]

**

以下为Python版本

**

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))

# -*-coding:utf-8 -*-
class Solution:
    def __init__(self):
        self.stack = []
        self.minValue = []

    def push(self, node):
        self.stack.append(node)
        if self.minValue:
            if self.minValue[-1] > node:
                self.minValue.append(node)
            else:
                self.minValue.append(self.minValue[-1])
        else:
            self.minValue.append(node)

    def pop(self):
        if not self.stack:
            return None
        self.minValue.pop()
        return self.stack.pop()

    def top(self):
        if self.stack[-1]:
            return None
        return self.stack[-1]

    def min(self):
        if not self.minValue:
            return None
        return self.minValue[-1]


if __name__ == '__main__':
    s = Solution()
    s.push(1)
    s.push(2)
    s.push(3)
    s.push(-3)
    s.push(-4)
    s.push(-5)
    print(s.min())
    s.pop()
    print(s.min())
    s.pop()
    print(s.min())

运行结果为:

-5
-4
-3
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值