剑指OFFER DAY1

第 1 天

栈与队列(简单)

剑指 Offer 09. 用两个栈实现队列

class CQueue:

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


    def appendTail(self, value: int) -> None:
        self.queue.append(value)


    def deleteHead(self) -> int:
        if self.queue == []:
            return -1
        num = self.queue[0]
        del(self.queue[0])
        return num

刷题心得:

Python 中 del() 函数和 remove() 方法的区别

del删除的就是那个索引的元素。

而remove删除的是首次出现在列表中的元素。

我们可以在一下代码中看到一些他们的特点

>>> a=[1,2,3,5,4,2,6]
>>> a.remove(a[5])
>>> a
[1, 3, 5, 4, 2, 6]

 因为remove传入的是值,所以它可以用变量指代如下

>>> a=[1,2,3,5,4,2,6]
>>> tem = a[1]
>>> a.remove(tem)
>>> a
[1, 3, 5, 4, 2, 6]

 但是del传入的是索引所以传入变量不会有任何变化

>>> a=[1,2,3,5,4,2,6]
>>> tem = a[1]
>>> del(tem)
>>> a
[1, 2, 3, 5, 4, 2, 6]

正确应该如下 

>>> a=[1,2,3,5,4,2,6]
>>> del(a[5])
>>> a
[1, 2, 3, 5, 4, 6]

同时又因为del是对索引进行操作,如果在循环中使用会导致索引的变化,可能会引起报错 


剑指 Offer 30. 包含min函数的栈

思路 :

设置一个stack和一个辅助栈mini_stack。

使用push方法时,将两个栈均为空时,将value压入stack和mini_stack,当栈不为空时,将value压入stack,将value和mini_stack栈顶比较,若value<mini_stack[-1],将value压入mini_stack,此时mini_stack[-1]为stack最小值。

使用pop方法时,先将stack pop,判断若stack.pop() == mini_stack[-1],说明当前stack最小值要出栈,同时将mini_stack.pop()。

使用min方法时,返回mini_stack[-1]

class MinStack:

    def __init__(self):
        """
        initialize your data structure here.
        """
        self.stack = []
        self.mini_stack = []
        

    def push(self, x: int) -> None:
        self.stack.append(x)
        if not self.mini_stack or x <= self.mini_stack[-1]:
            self.mini_stack.append(x)
        


    def pop(self) -> None:
        if self.stack.pop() == self.mini_stack[-1] :
            self.mini_stack.pop()
        



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

        else:
            return None


    def min(self) -> int:
        return self.mini_stack[-1]

当然还有另一种思路,就是minStack辅助栈每次记住入栈stack的最小值,即:将数据分别入栈stack和minStack,当入栈minStack的时候,与栈顶元素比较大小,若小于栈顶元素,则入栈成为新的栈顶元素,若大于栈顶元素,则入栈原先的栈顶元素。

'''

假装有代码

'''

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Weber77

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值