WLOP | 北漠
492 words
2 minutes
LeetCode-225-用栈实现队列
Implement Stack using Queues
Leetcode 225. Implement Stack using Queues
Implement the following operations of a stack using queues.
- push(x) — Push element x onto stack.
- pop() — Removes the element on top of the stack.
- top() — Get the top element.
- empty() — Return whether the stack is empty.
Example:
MyStack stack = new MyStack();
stack.push(1);stack.push(2);stack.top(); // returns 2stack.pop(); // returns 2stack.empty(); // returns false# @Author:Kilien# @lc app=leetcode id=225 lang=python3# [225] Implement Stack using Queues# time:O(1) space:O(n)# 思路:双端队列,左进右出模拟栈class MyStack:
def __init__(self): """ Initialize your data structure here. """ self.stack = collections.deque([])
def push(self, x: int) -> None: """ Push element x onto stack. """ self.stack.append(x)
def pop(self) -> int: """ Removes the element on top of the stack and returns that element. """ for i in range(len(self.stack) - 1): self.stack.append(self.stack.popleft()) return self.stack.popleft()
def top(self) -> int: """ Get the top element. """ return self.stack[-1]
def empty(self) -> bool: """ Returns whether the stack is empty. """ return len(self.stack) == 0
# Your MyStack object will be instantiated and called as such:# obj = MyStack()# obj.push(x)# param_2 = obj.pop()# param_3 = obj.top()# param_4 = obj.empty()Deque定义:
Deque队列是由栈或者queue队列生成的(发音是 “deck”,”double-ended queue”的简称)。 Deque支持线程安全,内存高效添加(append)和弹出(pop),从两端都可以,两个方向的大概开销都是 O(1) 复杂度。
Deque方法:
append(x) 添加x到右端。 appendleft(x) 添加x到左端。 pop() 移去并且返回一个元素,deque最右侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。 popleft() 移去并且返回一个元素,deque最左侧的那一个。如果没有元素的话,就升起 IndexError 索引错误。
>>> from collections import deque>>> d = deque('ghi') # make a new deque with three items>>> for elem in d: # iterate over the deque's elements... print(elem.upper())GHI
>>> d.append('j') # add a new entry to the right side>>> d.appendleft('f') # add a new entry to the left side>>> d # show the representation of the dequedeque(['f', 'g', 'h', 'i', 'j'])
>>> d.pop() # return and remove the rightmost item'j'>>> d.popleft() # return and remove the leftmost item'f'>>> list(d) # list the contents of the deque['g', 'h', 'i']>>> d[0] # peek at leftmost item'g'>>> d[-1] # peek at rightmost item'i'具体可见官方文档: collections — 容器数据类型 — Python 3.7.3 文档
LeetCode-225-用栈实现队列
https://evanyuki.github.io/posts/938b24b57e6141a29d84c66420007ea8/