《剑指offer》(2)队列、栈篇

《剑指offer》(2)队列、栈篇_第1张图片

class Solution:

    def __init__(self):

        self.stack1 = []

        self.stack2 = []

    def push(self, node):

        self.stack2.append(node)

    def pop(self):

        if self.stack1 == []:

            if self.stack2 == []:

                return []

            else:

                while self.stack2:

                    self.stack1.append(self.stack2.pop())

        return self.stack1.pop()

《剑指offer》(2)队列、栈篇_第2张图片

class Solution:

    def __init__(self) -> None:

        self.stack = []

    def push(self, node):

        self.stack.append(node)

    def pop(self):

        if self.stack != []:

            self.stack.pop()

    def top(self):

        if self.stack != []:

            temp = self.stack[-1]

        else:

            temp = None

        return temp

    def min(self):

        if self.stack != []:

            num = min(self.stack)

        else:

            num = None

        return num

 《剑指offer》(2)队列、栈篇_第3张图片

《剑指offer》(2)队列、栈篇_第4张图片

class Solution:

    def IsPopOrder(self , pushV: List[int], popV: List[int]) -> bool:

        n = len(pushV)

        stack = [] #辅助栈

        i = 0 #pushV入栈顺序指针

        for j in range(n): #出栈顺序指针

            #辅助栈为空或者栈顶元素不是出栈元素,就给辅助栈入栈

            while i < n and (len(stack) == 0 or stack[-1] != popV[j]):

                stack.append(pushV[i])

                i += 1

            #栈顶相等就出栈

            if stack[-1] == popV[j]:

                stack.pop()

            else:

                return False

        return True

《剑指offer》(2)队列、栈篇_第5张图片

class Solution:

    def ReverseSentence(self , str: str) -> str:

        n = len(str)

        if n <= 1:

            return str

        res = str.split(' ')

        return ' '.join(res[::-1])

 《剑指offer》(2)队列、栈篇_第6张图片

class Solution:

    def maxInWindows(self , num: List[int], size: int) -> List[int]:

        if size == 0 or len(num) < size:

            return []

        left = 0

        right = 0

        res = []

        while right < len(num):

            if right - left + 1 == size:

                res.append(max(num[left:right+1]))

                left += 1

                right += 1

            else:

                right += 1

        return res

 

你可能感兴趣的:(python,开发语言)