zoukankan      html  css  js  c++  java
  • 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()

     

  • 相关阅读:
    我的2017年总结
    iOS App图标和启动画面尺寸
    苹果手机屏幕一览
    纯 HTML5 APP与原生APP的差距在哪?
    设置全局导航栏颜色,标题大小和UIBarButtonItem字体大小
    OCiOS开发:CAGradientLayer 渐变色
    UICollectionViewCell的设置间距
    NSUserDefault的使用
    WKWebView进度及title
    TextView中的部分文字响应点击事件
  • 原文地址:https://www.cnblogs.com/marvintang1001/p/11175622.html
Copyright © 2011-2022 走看看