刷题Day(8) | 代码随想录

126 阅读1分钟

本系列文章是我刷代码随想录过程中的笔记。代码地址:leetcode

今天是我刷“代码随想录”的第八天

今日内容

  • 理论基础
  • 232.用栈实现队列
  • 225.用队列实现栈

理论基础

队列是先进先出,栈是先进后出。

image.png

leetcode 232. 用栈实现队列

这道题使用两个栈来实现队列,需要定义两个栈,一个入栈,一个出栈。难点在于如何实现pop函数。

  • 首先,判断队列是否为空
  • 将入栈的值转移到出栈
  • 弹出出栈的值
class MyQueue:

    def __init__(self):
        self.s_in = []
        self.s_out = []

    def push(self, x: int) -> None:
        self.s_in.append(x)

    def pop(self) -> int:
        if self.empty(): return None
        if self.s_out:
            return self.s_out.pop()
        else:
            for i in range(len(self.s_in)):
                self.s_out.append(self.s_in.pop())
            return self.s_out.pop()

    def peek(self) -> int:
        ans = self.pop()
        self.s_out.append(ans)
        return ans

    def empty(self) -> bool:
        return not (self.s_in or self.s_out)

leetcode 225. 用队列实现栈

这道题的难点也在于如何实现pop函数

  • 首先要判空
  • 除队尾元素外,其余元素先出队后入队
  • 弹出队首元素
from collections import deque
# import lib
class MyStack:

    def __init__(self):
        self.que = deque()

    def push(self, x: int) -> None:
        self.que.append(x)

    def pop(self) -> int:
        if self.empty():
            return None
        for i in range(len(self.que) - 1):
            self.que.append(self.que.popleft())
        return self.que.popleft()

    def top(self) -> int:
        if self.empty():
            return None
        return self.que[-1]

    def empty(self) -> bool:
        return not self.que

总结

今天的题都是基础题,主要考了对于队列和栈的基本认识。