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个最大元素

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.m或d论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值