• leetcode--232:(栈和队列)Implement Queue using Stacks


    # 2019.7.12:

    我的思路:

      很明显,一个栈是做不到的,只能建立两个栈s1和s2。栈的实现可以用deque(题目说的),那就很简单实现了。然后两个栈如何分配呢?我们先看栈能用哪些方法:

    • push(item) 添加一个新的元素item到栈顶
    • pop() 弹出栈顶元素
    • is_empty() 判断栈是否为空
    • size() 返回栈的元素个数(用不到)
    • top()返回栈顶元素

      再看队列需要实现的方法:

      1. push(x):把x放入queue尾部--push进s1中

      2. pop():移除队列第一个元素--如果s2为空,把s1的元素全部pop出来再push到s2中,然后s2栈顶就是队列最早进来的元素,pop即可

      3. peek():获取第一个元素--类似pop()

      4. empty():判断队列是否为空--s1和s2同时为空的时候就返回true

    我的答案:

    from collections import deque
    
    class Stack:
        def __init__(self):
            self.items = deque()    # 创建一个deque实例
    
        def push(self, x):
            return self.items.append(x)
    
        def pop(self):
            return self.items.pop()
    
        def top(self):
            return self.items[-1]
    
        def is_empty(self):
            return len(self.items) == 0
    
    
    class MyQueue:
    
        def __init__(self):
            """
            Initialize your data structure here.
            """
            self.s1 = Stack()
            self.s2 = Stack()
    
        def push(self, x: int) -> None:
            """
            Push element x to the back of queue.
            """
            self.s1.push(x)
    
        def pop(self) -> int:
            """
            Removes the element from in front of queue and returns that element.
            """
            if self.s2.is_empty():
                while not self.s1.is_empty():
                    val = self.s1.pop()
                    self.s2.push(val)
            return self.s2.pop()
    
        def peek(self) -> int:
            """
            Get the front element.
            """
            if self.s2.is_empty():
                while not self.s1.is_empty():
                    val = self.s1.pop()
                    self.s2.push(val)
            return self.s2.top()
    
        def empty(self) -> bool:
            """
            Returns whether the queue is empty.
            """
            return self.s1.is_empty() and self.s2.is_empty()

     

  • 相关阅读:
    Linq的一些常见Demo
    有一名员工发现日历已经7天没有翻了,于是他连着翻了7页,7天的总和刚好是138,问这一天是几号?
    20块钱,1块钱1瓶,两个空瓶子可以换一瓶,问最多可以喝几瓶?
    【转】Java编程之字符集问题研究
    Reset / Validate Buffer
    Article Master Data Deviation
    STAD Parameters
    Linux11.2 MySQL常用命令
    Linux11.1 设置更改Mysql的root密码及连接mysql
    Linux5.10 告警系统
  • 原文地址:https://www.cnblogs.com/marvintang1001/p/11175622.html
Copyright © 2020-2023  润新知