Letcode刷题(python)

题目出自《程序员代码面试指南》


1.1 最小栈

设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) -- 将元素 x 推入栈中。

  • pop() -- 删除栈顶的元素。

  • top() -- 获取栈顶元素。

  • getMin() -- 检索栈中的最小元素。

python内的list来实现栈

class MinStack:

    def __init__(self):
        """
        initialize your data structure here.
        """
        #定义一个列表
        self.stack = []
        
    #push(x) -- 将元素 x 推入栈中。
    def push(self, x: int) -> None:
        self.stack.append(x)

    #pop() -- 删除栈顶的元素。
    def pop(self) -> None:
        length = len(self.stack)
        self.stack = self.stack[:length-1]

    #top() -- 获取栈顶元素。
    def top(self) -> int:
        return self.stack[-1]

    #getMin() -- 检索栈中的最小元素。
    def getMin(self) -> int:
        return min(self.stack)


# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()

 

1.2 由两个栈组成的队列

用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。

class Solution:
    #定义一个栈作为压入栈,在压入数据时,只往这个栈压入;
    #另一个栈只为弹出栈,只从这个栈弹出数据
    def __init__(self):
        self.stackpush = []
        self.stackpop = []
    def push(self, node):
        self.stackpush.append(node)
    def pop(self):
        #要实现队列的先进先出,也就是1.先把数据压入压入栈,2.再把压入栈中的数据倒入弹出栈,3.由弹出栈再弹出数据
        #先保证弹出栈中数据都已经弹出
        if self.stackpop:
            return self.stackpop.pop()
        
        #如果弹出栈为空,则进行上述过程
        if self.stackpush == None:
            return None
        else:
            #当压入栈中的所有数据都倒入弹出栈
            while self.stackpush:
                self.stackpop.append(self.stackpush.pop())
            return self.stackpop.pop()

1.3 仅用递归函数和栈操作逆序一个栈

待续。。。

你可能感兴趣的:(python学习)