2024.6.13刷题记录

目录

一、828. 模拟栈 - AcWing题库

1.使用列表实现-摸鱼法

2.使用数组实现

二、AcWing 3302. 表达式求值 - AcWing

三、829. 模拟队列 - AcWing题库

四、830. 单调栈 - AcWing题库

五、154. 滑动窗口 - AcWing题库


一、828. 模拟栈 - AcWing题库

1.使用列表实现-摸鱼法

# 使用列表实现
'''
push x – 向栈顶插入一个数 x;
pop – 从栈顶弹出一个数;
empty – 判断栈是否为空;
query – 查询栈顶元素。
'''
def push(stack, x):stack.append(x)def pop(stack):stack.pop()def empty(stack):return 'YES' if len(stack) == 0 else 'NO'def query(stack):return stack[-1]if __name__ == '__main__':m = int(input())stack = []for _ in range(m):oper = input().split()if oper[0] == 'push':push(stack, int(oper[1]))elif oper[0] == 'pop':pop(stack)elif oper[0] == 'empty':print(empty(stack))else:print(query(stack))

2.使用数组实现

多用数组实现。

# 使用数组实现
def init(N = 100010):global stack, topstack = [0] * Ntop = 0     # 栈顶指针def push(x):global stack, topstack[top] = xtop += 1def pop():global stack, toptop -= 1def empty():global stack, topreturn 'YES' if top <= 0 else 'NO'   # 栈顶指针同时代表有多少个元素def query():global stack, topreturn stack[top - 1]m = int(input())
init()
for _ in range(m):oper = input().split()if oper[0] == 'push':push(int(oper[1]))elif oper[0] == 'pop':pop()elif oper[0] == 'empty':print(empty())else:print(query())

二、AcWing 3302. 表达式求值 - AcWing

不会,思路来自题解(AcWing 3302. 表达式求值:多图讲解运算符优先级+详细代码注释 - AcWing),代码来自题解(AcWing 3302. 表达式求值 - AcWing)。

dic = {'(': 0, '+': 1, "-": 1, '*': 2, '/': 2}  # 优先级
op = []
num = []def new_eval():# 计算函数b = num.pop()   # 注意弹出顺序a = num.pop()c = op.pop()if c == '+':x = a + belif c == '-':x = a - belif c == '*':x = a * belse:x = int(a / b)   # 向0取整num.append(x)   # 压回栈s = input()
n = len(s)
i = 0
while i < n:c = s[i]if c.isdigit():     # 该函数检查字符是否为数字 x = 0while i < n and s[i].isdigit():x = x * 10 + int(s[i])i += 1# 循环结束时为运算符,退回一次进入下一次判断i -= 1  # 重要num.append(x)elif c == '(':# 左括号直接入栈op.append('(')elif c == ')':# 弹出进行运算,直到遇见'('while op[-1] != '(':new_eval()op.pop()  # 左括号不要else:# 运算符while len(op) and dic[op[-1]] >= dic[c]:# 当运算符栈顶优先级大于等于遇到的运算符# 弹出运算# 当栈顶为左括号时直接进new_eval()# 入栈op.append(c)i += 1# 栈内剩余元素运算
while len(op):new_eval()
print(num[-1])  # 最后的栈顶即为运算结果

三、829. 模拟队列 - AcWing题库

def init(N = 100010):global queue, front, rearqueue = [0] * Nfront = -1rear = -1def push(x):global queue, rearrear += 1queue[rear] = xdef pop():global frontfront += 1def empty():global front, rearreturn "YES" if front >= rear else "NO"def query():global queue, front, rearreturn queue[front + 1]m = int(input())
init()
for _ in range(m):oper = input().split()if oper[0] == "push":push(int(int(oper[1])))elif oper[0] == "pop":pop()elif oper[0] == "empty":print(empty())else:print(query())

四、830. 单调栈 - AcWing题库

n = int(input())
nums = list(map(int, input().split()))
st = []     # 维护左边的单调递增栈
# ans = [-1] * n
for i, x in enumerate(nums):ans = -1    # 节省储存空间while st and st[-1] >= x:   # 维护单调递增st.pop()# if st: ans[i] = st[-1]if st: ans = st[-1]print(ans, end = ' ')st.append(x)# # 输出
# for x in ans: print(x, end = ' ')

五、154. 滑动窗口 - AcWing题库

思路来自题解(AcWing 154. 滑动窗口---海绵宝宝来喽 - AcWing)

当时没有想到怎么保证队内全都是窗口内的元素,答案:“当队头元素在窗口的左边的时候,弹出队头”,虽然不能保证队内一直没有窗口外的元素,但是能保证使用到的队内元素(队头)全是窗口内元素。当时是有想到这个方法的,但是以为不行,一下没转过来弯。

代码来自题解(AcWing 154. 滑动窗口 - AcWing)

队列储存索引而不是元素,通过储存索引使我们能够快速判断元素是否出窗口。

# 先进先出
# 单调队列(本质上是双端队列)
N = 1000010
queue = [0] * N   # 储存下标
front, rear = 0, -1
n, k = map(int, input().split())
nums = list(map(int, input().split()))# 求最小值,单调递增队列
for i, x in enumerate(nums):# 弹出队头越界值while front <= rear and i - k >= queue[front]:front += 1# 弹出末尾大于x的值,注意这里是值比较while front <= rear and nums[queue[rear]] > x:rear -= 1# 将rear放入末尾rear += 1queue[rear] = i     # 注意这里是下标而不是值# 输出,注意这里是k - 1,因为第一个窗口也要输出if i >= k - 1:print(nums[queue[front]], end = ' ')
print()front, rear = 0, -1     # 初始化    
# 求最大值,单调递减队列
for i, x in enumerate(nums):# 队头弹出while front <= rear and i - k + 1 > queue[front]:front += 1# 队尾弹出,弹出操作均需要判断是否为空while front <= rear and nums[queue[rear]] < x:rear -= 1# 加入下标rear += 1queue[rear] = i# 输出if i >= k - 1:print(nums[queue[front]], end = ' ')

感谢你看到这里!一起加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26947.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在 Windows 10/11 上编辑 PDF [4 种简单方法]

PDF 在大多数设备上都易于查看&#xff0c;但由于其设计用于查看&#xff0c;因此编辑起来可能比较棘手。编辑 PDF 可能比编辑 Microsoft Office 文档更具挑战性。 不用担心&#xff0c;我们已经为你做好了准备。无论你是想添加、删除还是插入文本或图片&#xff0c;你都可以使…

Coze+Discord:打造你的免费AI助手(教您如何免费使用GPT-4o/Gemini等最新最强的大模型/Discord如何正确连接Coze)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 准备Discord📝 准备Coze🔌 连接💡 测试效果⚓️ 相关链接 ⚓️📖 介绍 📖 你是否想免费使用GPT-4o/Gemini等最新最强的大模型,但又不想花费高昂的费用?本文将教你如何通过Coze搭建Bot,并将其转发…

【AI绘画】Stable Diffusion 3开源

Open Release of Stable Diffusion 3 Medium 主要内容 Stable Diffusion 3是Stability AI目前为止最先进的文本转图像开放源代码算法。 这款模型的小巧设计使其完美适合用于消费级PC和笔记本电脑&#xff0c;以及企业级图形处理单元上运行。它已经满足了标准化的文字转图像模…

AI办公自动化:批量合并多个Excel表格的数据并汇总

工作任务&#xff1a; 有多个表格 把里面的月流量数据都合并到一张表中&#xff1a; 在chatgpt中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个Python脚本编写任务&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\AI自媒体内容\AI行…

计算机视觉全系列实战教程:(九)图像滤波操作

1.图像滤波的概述 (1)Why (为什么要进行图像滤波) 去噪&#xff1a;去除图像在获取、传输等过程中的各种噪音干扰提取特征&#xff1a;使用特定的图像滤波器提取图像特定特征 (2)What (什么是图像滤波) 使用滤波核对图像进行卷积运算或非线性运算&#xff0c;以达到去噪或提…

11.2 Go 常用包介绍

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

使用‘消除’技术绕过LLM的安全机制,不用训练就可以创建自己的nsfw模型

开源的大模型在理解和遵循指令方面都表现十分出色。但是这些模型都有审查的机制&#xff0c;在获得被认为是有害的输入的时候会拒绝执行指令&#xff0c;例如会返回“As an AI assistant, I cannot help you.”。这个安全功能对于防止误用至关重要&#xff0c;但它限制了模型的…

docker编译一个支持flv的nginx镜像

在本地下载编译了下 (参考:https://www.cnblogs.com/hhmm99/p/16050844.html) 相关文件下载 https://nginx.org/download/ https://gitee.com/winshining/nginx-http-flv-module 编译时缺少openssl报错 ./configure: error: SSL modules require the OpenSSL library. You …

化学品危险性分类鉴定报告 危化品危险性分类

一、化学品危险性分类报告&#xff1a; 按照国务院令 第591号 《危险化学品安全管理条例》、原十部委公告 2015年 第5号 《危险化学品目录&#xff08;2015版&#xff09;》、原安监总局令 第60号《化学品物理危险性鉴定与分类管理办法》和原安监总局令 第53号《危险化学品登记…

IBM Spectrum LSF Process Manager 在共享分布式计算环境中运行和管理业务关键工作流程

亮点 ● 快速创建复杂的分布式工作流 ● 开发可重复的最佳实践 ● 自信地运行关键工作流程 ● 提高流程可靠性 IBM Spectrum LSF Process Manager 使您能够设计和自动化计算或分析流程&#xff0c; 捕获和保护可重复的最佳实践。 使用直观的图形界面&#xff0c;您可以轻松记录…

【漏洞复现】飞企互联-FE企业运营管理平台 treeXml.jsp SQL注入漏洞

0x01 产品简介 飞企互联-FE企业运营管理平台是一个基于云计算、智能化、大数据、物联网、移动互联网等技术支撑的云工作台。这个平台可以连接人、链接端、联通内外&#xff0c;支持企业B2B、C2B与020等核心需求&#xff0c;为不同行业客户的互联网转型提供支持。其特色在于提供…

【十大排序算法】基数排序

数字犹如无数繁星&#xff0c;基数排序如晨曦的指引&#xff0c;将混沌序列织就成和谐的序曲。 文章目录 一、基数排序二、发展历史三、处理流程四、算法实现五、算法特性六、小结推荐阅读 一、基数排序 基数排序是一种非比较性的排序算法&#xff0c;它根据元素的位数来对元…

极限网关助力好未来 Elasticsearch 容器化升级

极限网关在好未来的最佳实践案例&#xff0c;轻松扛住日增百 TB 数据的流量&#xff0c;助力 ES 从物理机到云原生架构的改造&#xff0c;实现了流控、请求分析、安全管理、无缝迁移等场景。一次完美的客户体验~ 背景 物理机架构时代 2022 年&#xff0c;好未来整个日志 Elas…

GitLab中用户权限

0 Preface/Foreword 1 权限介绍 包含5种权限&#xff1a; Guest&#xff08;访客&#xff09;&#xff1a;可以创建issue、发表comment&#xff0c;不能读写版本库Reporter&#xff08;报告者&#xff09;&#xff1a;可以克隆代码&#xff0c;不能提交。适合QA/PMDeveloper&…

教学辅助系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;教师管理&#xff0c;作业管理&#xff0c;学生管理&#xff0c;管理员管理&#xff0c;作业提交管理&#xff0c;教学视频管理 教室账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0…

Oracle表空间扩容

1、查询表空间使用情况&#xff08;未考虑自增长情况&#xff09; SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TO…

React+TS前台项目实战(九)-- 全局常用组件弹窗Dialog封装

文章目录 前言Dialog公共弹窗组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局公共弹窗Dialog组件封装&#xff0c;将用到上篇封装的模态框Modal组件。有时在前台项目中&#xff0c;偶尔要用到一两个常用的组件&#xff0c;如 弹窗&#x…

Oracle修改数据

两种方法&#xff0c;第一种select * from table for update; 第二种&#xff0c;select t.* &#xff0c;t.rowid from table t; 兄弟们啊&#xff0c;最近一直内网工作&#xff0c;很多东西也没时间发。等后面再补吧

HTTP 概述

HTTP 概述 HTTP 是一种用于获取资源&#xff08;如 HTML 文档&#xff09;的协议。 它是 Web 上任何数据交换的基础&#xff0c;它是一种客户端-服务器协议&#xff0c;这意味着请求由接收方&#xff08;通常是 Web 浏览器&#xff09;发起。 一个完整的文档是从获取的不同子文…

2024全国大学生信息安全竞赛(ciscn)半决赛东北赛区Pwn题解

前言 今年Ciscn华东北赛区半决赛的时间比较晚&#xff0c;找东北赛区的师傅要了一份半决赛Pwn题。 听说好像有5个Pwn题&#xff0c;但是只拿到了4个。如果有师傅有剩下那一个欢迎私信我。 拿到手的4个除了最后一个vmJS&#xff0c;还是挺简单的。都是格式化字符串、栈溢出和…