天天看點

python3__leecode/面試題 03.04. 化棧為隊一、刷題内容二、解題方法

面試題 03.04. 化棧為隊

  • 一、刷題内容
    • 原題連結
    • 内容描述
  • 二、解題方法
    • 1.方法一

一、刷題内容

原題連結

https://leetcode-cn.com/problems/implement-queue-using-stacks-lcci/

内容描述

實作一個MyQueue類,該類用兩個棧來實作一個隊列。

示例:

MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek();  // 傳回 1
queue.pop();   // 傳回 1
queue.empty(); // 傳回 false
           

說明:

你隻能使用标準的棧操作 – 也就是隻有 push to top, peek/pop from top, size 和 is empty 操作是合法的。

你所使用的語言也許不支援棧。你可以使用 list 或者 deque(雙端隊列)來模拟一個棧,隻要是标準的棧操作即可。

假設所有操作都是有效的 (例如,一個空的隊列不會調用 pop 或者 peek 操作)。

二、解題方法

1.方法一

peek:檢視首個元素,不會移除首個元素,如果隊列是空的就傳回null

class MyQueue:

    def __init__(self):
        self.pushs = []
        self.pops = []


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


    def pop(self) -> int:
        if len(self.pops)==0:
            for i in range(len(self.pushs)):
                self.pops.append(self.pushs.pop())
        return self.pops.pop()


    def peek(self) -> int:
        if len(self.pops)==0:
            for i in range(len(self.pushs)):
                self.pops.append(self.pushs.pop())
        temp = self.pops.pop()
        self.pops.append(temp)
        return temp


    def empty(self) -> bool:
        if len(self.pushs)==0 and len(self.pops)==0:
            return True
        else:
            return False

# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()