美文网首页
[每日一题]232.implement queue using

[每日一题]232.implement queue using

作者: 何学诚 | 来源:发表于2019-04-05 20:45 被阅读0次
1.这是一道使用堆栈去模拟队列的题目,感觉挺难想的。

反正我是没想到。
栈:先进后出。
队列:先进先出。

链接:https://leetcode.com/problems/implement-queue-using-stacks/

232-implement-queue-using-stacks.JPG

我们使用list模拟stack(先进后出),append 入栈,pop出栈
这里,采用两个堆栈实现这个队列。一个用于存数据input,一个用于取数据output。
(每次从input取到output的时候,其实就是把堆栈的数据进行了一次反转。)
1.每次append的时候,就直接存进input中。
2.每次pop或者peek的时候,就先看看output中有数据没,有的话就直接返回,没得话就从input中先读入数据,然后再从output中读

大致过程就是这样:

232_queue_using_stacksBPush.png
2.题解:
# 使用两个stack,一个正常放入输入值,一个在输出时候使用.
class MyQueue(object):

    def __init__(self):
        self.input_stack = []
        self.output_stack = []

    def push(self, x):
        self.input_stack.append(x)

    def pop(self):
        if len(self.output_stack) == 0:
            for i in range(len(self.input_stack)):
                self.output_stack.append(self.input_stack.pop())
        return self.output_stack.pop()

    def peek(self):
        if len(self.output_stack) == 0:
            for i in range(len(self.input_stack)):
                self.output_stack.append(self.input_stack.pop())
        return self.output_stack[-1]

    def empty(self):
        if len(self.input_stack) == 0 and\
                len(self.output_stack) == 0:
            return True
        else:
            return False

3.完整代码

查看链接:
https://github.com/Wind0ranger/LeetcodeLearn/blob/master/2-stack-quque/232-Implement-Queue-using-Stacks.py

相关文章

网友评论

      本文标题:[每日一题]232.implement queue using

      本文链接:https://www.haomeiwen.com/subject/mbmkiqtx.html