LeetCode刷题之栈、队列、堆的解题方法及相关练习

理论引述

栈Stack:先进后出的线性表
队列Queue:先进先出的线性表
python中heapq堆的讲解

a = [1,2,3,4,5]
print(a.pop())  # 结果为5,说明弹出的是数组中的最后一个元素

习题目录

[1]. 快乐的LeetCode — 225. 用队列实现栈的三种解法
[2]. 快乐的LeetCode — 面试题09. 用两个栈实现队列
[3]. 快乐的Leetcode — 155. 最小栈 (面试题30. 包含min函数的栈)
[4]. 快乐的LeetCode — 面试题31. 栈的压入、弹出序列
[5]. 快乐的LeetCode — 215. 数组中的第K个最大元素


1.使用队列实现栈时,可以转化思路为数组顺序的变换

图解表述:

在这里插入图片描述
代码表述:

class MyStack:

    def __init__(self):
        self.queue = []

    def push(self, x):
        self.queue.append(x)           # 先进
        length = len(self.queue)
        for i in range(length-1):
            first = self.queue[0]      # 后出
            del self.queue[0]
            self.queue.append(first)

    def pop(self):
        target = self.queue[0]
        del self.queue[0]
        return target

    def top(self):
        return self.queue[0]

    def empty(self):
        return len(self.queue) == 0

2.使用栈实现队列

  • push(x) – 将一个元素放入队列的尾部。
  • pop() – 从队列首部移除元素。
  • peek() – 返回队列首部的元素。
  • empty() – 返回队列是否为空。

代码表述:

class MyQueue(object):
    def __init__(self):
        self.quene = []

    def push(self, x):
        self.quene.append(x)      # 先进

    def pop(self):
        target = self.quene[0]    # 先出
        del self.quene[0]
        return target

    def peek(self):
        return self.quene[0]

    def empty(self):
        return len(self.quene) == 0

3.包含min函数的栈

快乐的Leetcode — 155. 最小栈 (面试题30. 包含min函数的栈)


4.面试题31. 栈的压入、弹出序列

关键点:每次入栈后,循环判断 “栈顶元素 == 弹出序列的当前元素” 是否成立,将符合弹出序列顺序的栈顶元素全部弹出。

class Solution(object):
    def validateStackSequences(self, pushed, popped):
        stack, i = [], 0
        for num in pushed:
            stack.append(num)
            while stack and stack[-1] == popped[i]:
                stack.pop()
                i += 1
        return not stack

5.数组中的第K个最大元素

快乐的LeetCode — 215. 数组中的第K个最大元素

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值