力扣剑指-09 用栈实现队列和华为机试-用列表实现栈

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

示例 1:

输入:
["CQueue","appendTail","deleteHead","deleteHead"]
[[],[3],[],[]]
输出:[null,null,3,-1]

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

关于力扣的题目,需要思考的问题包括有如何将力扣的题目与当前试题分开,如何思考正确的解题方式。

知道队列的意思是先入后出,这一边先进入队列,那边再出队列。但是栈不同,栈只能从上面压入从上面出来,所以需要实现的问题在于,压入的时候按照栈的方式正常压入,当需要弹出的时候,得将栈反转,再弹出。

s1,s2 = [], []
# 压入
s1.append(i)

# 弹出
while s1:
    s2.append(s1.pop())
s2.pop()

等于弹出的时候,将栈进行反转,再直接采用栈的方式弹出就好。

class queue:
    def __init__(self):
        self.s1,self.s2 = [], []
    def append_(self,value):
        self.s1.append(value)
    def pop_(self):
        if not self.s1 and not self.s2:return -1
        if not self.s2:
            while self.s1:
                self.s2.append(self.s1.pop())
        return self.s2.pop()

还有一个就是火车入栈,上次已经做过分析。主要思路就是将通过栈内弹出和压入的方式。

问题描述在有一排火车需要入站,但是只能先进先出的方式入栈,思考所有的入栈方式。

def stack(wait,stack,leave):
    if not wait and not stack:return ans
    if wait:
        stack(wait[:-1],stack+[wait[-1],leave)
    if stack:
        stack(wait[:],stack[:-1],leave+[stack[-1]])

在方法中,离开和栈中的判断方式是if 和if 而不是if...elif这种,因为两个判断方式是并列的,需要同时考虑,当前条件下既可入栈也可出栈。

你可能感兴趣的:(基础算法笔记,leetcode,算法,职场和发展)