美文网首页
Python编程题32--最小栈

Python编程题32--最小栈

作者: wintests | 来源:发表于2021-11-28 10:00 被阅读0次

题目

栈是一种常见的数据结构,其特点是 先进后出,也就是说最先放进去的元素,需要到最后才能取出来。

请使用 列表list 实现一个能在 常数时间 内检索到最小元素的栈,需实现以下操作:

  • push(x) -- 将元素 x 压入栈顶
  • pop() -- 移除栈顶元素
  • top() -- 获取栈顶元素
  • min() -- 检索并返回栈中的最小元素
  • empty() -- 判断栈是否为空
  • size() -- 获取栈的长度

说明:假设每次调用 pop / top / min 操作都能保证栈不为空。

实现思路1

  • 使用一个栈 s 用于保存每个元素,另外再使用一个栈 min_s 用于保存当前的最小值
  • 每次入栈时,把元素压入栈 s 的栈顶,同时把栈 s 中的最小值,压入栈 min_s 的栈顶
  • 每次出栈时,两个栈都需要执行 pop() 操作
  • 如果要获取栈顶元素,则直接取栈 s 的栈顶元素;如果要获取栈中的最小值,则直接取栈 min_s 的栈顶元素

代码实现1

class MinStack:

    def __init__(self):
        self.s = []
        self.min_s = []

    def push(self, x):
        self.s.append(x)
        if self.min_s == [] or self.min_s[-1] > x:
            self.min_s.append(x)
        else:
            self.min_s.append(self.min_s[-1])

    def pop(self):
        self.s.pop()
        self.min_s.pop()

    def top(self):
        return self.s[-1]

    def min(self):
        return self.min_s[-1]

    def empty(self):
        return self.s == []

    def size(self):
        return len(self.s)

实现思路2

  • 只使用一个栈,同时保存当前值和栈内的最小值
  • 每次入栈时,入栈元素为元组形式:(最小值,当前值),每次出栈时,把栈顶的元组执行出栈即可
  • 因为栈顶的元组中同时保存了栈内的最小值和栈顶的当前值,所以栈顶元组中,第一个值即为栈内最小值,第二个值即为栈顶当前值

代码实现2

class MinStack:

    def __init__(self):
        self.s = []

    def push(self, x):
        if self.s == [] or self.s[-1][0] > x:
            self.s.append((x, x))
        else:
            self.s.append((self.s[-1][0], x))

    def pop(self):
        self.s.pop()

    def top(self):
        return self.s[-1][1]

    def min(self):
        return self.s[-1][0]

    def empty(self):
        return self.s == []

    def size(self):
        return len(self.s)

更多Python编程题,等你来挑战:Python编程题汇总(持续更新中……)

相关文章

  • Python编程题32--最小栈

    题目 栈是一种常见的数据结构,其特点是 先进后出,也就是说最先放进去的元素,需要到最后才能取出来。 请使用 列表l...

  • 面试遇到的问题(二)

    定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。 参考牛客网-《剑指offer_编程题...

  • LeetCode刷题笔记(三)栈与队列

    三. 栈与队列 python中的栈直接用list实现,队列用deque,需要导入外部包。 155. 最小栈 题目:...

  • 数据结构——栈和队列

    用数组实现栈和队列 用栈实现队列 用队列实现栈 栈和队列的经典算法题最小间距栈宠物收养所 数组实现栈和队列 用数组...

  • 第五周学习计划

    本周学习python相关内容,练习sql题,练习python编程题,尽量跟进度Õ_Õ

  • 腾讯笔试--逛街

    主要的知识点是:单调栈,该题牢牢记得:栈中记录当前楼能看到的元素 单调栈是单调递增栈,栈顶是最小值单调栈存的是能看...

  • 2019-12-11 刷题-3(栈)

    155-最小栈 解法一:此题最简单的做法就是实现两个栈,一个记录当前元素,一个记录当前序列的最小元素。代码: 解法...

  • Nowcoder 模拟

    https://www.nowcoder.com/test/9439037/summary[编程题] 寻宝最小生成...

  • Python编程题汇总(持续更新中……)

    下列为一些常见的Python编程题,主要用于学习和巩固所学知识。 Python编程题1---九九乘法表[https...

  • leetcode 155 python 最小栈

    传送门 题目要求 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。 push(x...

网友评论

      本文标题:Python编程题32--最小栈

      本文链接:https://www.haomeiwen.com/subject/podraltx.html