- 博客(26)
- 收藏
- 关注
原创 算法学习day18----python数据结构--滑动窗口(单调队列)
摘要:本文介绍了一种使用单调队列解决滑动窗口最小值/最大值问题的方法。通过维护两个双端队列(分别用于最小值和最大值),在遍历数组时动态调整队列元素,确保队列头部始终是当前窗口的最小/最大值。算法时间复杂度为O(n),空间复杂度为O(k),其中n为数组长度,k为窗口大小。关键步骤包括:移除超出窗口范围的元素、保持队列单调性、记录满足窗口大小的结果。该方法高效地解决了滑动窗口极值查询问题。
2025-07-17 13:36:55
440
原创 算法学习day16----Python数据结构--模拟队列
摘要:本文展示了一个队列模拟的实现,使用Python类封装了push、pop、query和empty等基本操作。代码通过列表实现队列功能,其中pop(0)实现先进先出特性。程序读取输入指令并处理,包含错误检测和统一输出。该实现回顾了队列数据结构的基本原理,可作为基础数据结构的练习范例。
2025-07-15 21:14:17
273
原创 算法学习day15----蓝桥杯--进制转换
这段Python代码定义了一个jinzhizhuanhuan函数来计算数字x在n进制下的各位数字之和。主程序遍历1到2024之间的整数,统计那些在二进制和四进制下各位数字之和相等的数字个数,并将结果输出。最终会打印出满足这个条件的数字总数。
2025-07-06 15:58:26
376
1
原创 OR练习生1---胡运权(第五版)--2.5-单纯形表填空
本文探讨了一道中等难度的单纯形表填空题,重点考察单纯形法的矩阵描述基础及应用能力。题目设计注重对单纯形法核心概念的理解和实际运用,通过填空题形式检验解题者对单纯形表各要素的掌握程度。该题具有较好的区分度,能够有效评估学习者对线性规划求解方法的熟练程度。
2025-06-20 21:46:52
427
原创 算法学习day13----luogu#B3701 [语言月赛202301] 避雷针
本文分享了优化算法性能的经验:最初使用集合去重的方法计算受影响区域导致超时,后改用布尔数组标记仍不理想。最终采用差分数组技术,通过维护前缀和高效统计受影响区域,成功解决了性能问题。这一过程体现了从基础方法到高效算法的优化思路,同时也复习了差分这一数据结构的知识点。
2025-06-17 14:40:31
174
原创 算法学习day12----python数据结构--栈与习题
本文介绍了栈(Stack)的基本概念和实现。栈是一种后进先出(LIFO)的数据结构,主要操作包括创建栈、判断空栈、入栈(Push)、出栈(Pop)、查询栈顶元素(Query)等。文章详细说明了每个操作的实现逻辑,并提供了一个完整习题解决方案:通过输入指令序列(如push、pop、query等)来操作栈,并按要求输出查询结果和空栈判断结果。代码实现采用Python类的方式,包含初始化、各操作方法及处理输入输出的主程序,展现了栈的实际应用场景和操作流程。
2025-06-16 11:54:26
444
原创 算法学习day11----双链表--习题与链表的规范书写
本文介绍了双链表操作的规范化实现,主要包含节点类和链表类的定义。LNode类存储元素值和前后指针;LList类提供头插、尾插、前后插入、删除等操作,通过数组nodes记录所有节点以便快速索引。代码实现规范了双链表的插入删除逻辑,包括边界处理(头尾节点操作)和指针维护。示例main函数演示了如何根据输入指令(L/R/D/IL/IR)进行相应操作,最后遍历输出链表元素。该实现确保了双链表操作的正确性和高效性,适用于需要频繁插入删除的场景。
2025-06-15 16:52:18
412
原创 算法学习day11----双链表--概念
双链表在单链表基础上增加了前驱指针(prior),需同时维护头尾节点。实现时,在节点类中添加prior指针,链表类初始化头尾节点。主要操作包括:头插法需更新前驱指针和尾节点;尾插法需维护前驱指针;一般插入和删除操作需同时处理前后指针关系。各方法都需考虑空链表和边界情况,相比单链表主要增加了prior指针的维护逻辑。查找操作与单链表相同。双链表通过双向指针提高了操作灵活性,但增加了指针维护的开销。
2025-06-15 13:55:20
564
原创 算法学习day10----单链表习题
本文介绍了单链表的基本操作实现,重点讲解了如何通过索引记录插入顺序并进行增删操作。作者通过具体示例演示了头插法(H)、指定位置插入(I)和删除(D)等操作对链表的影响,并强调需要维护一个节点数组来记录插入顺序。文章给出了Python实现的链表类(LList),包含插入、删除和遍历等方法,其中删除操作会根据之前插入的序号进行。最后展示了主程序如何读取输入并调用相应操作,同时提到在竞赛环境中使用sys.stdin.readline进行快速输入读取的技巧。整体内容简明扼要地展现了链表操作的核心实现逻辑。
2025-06-14 21:54:01
666
原创 算法学习day9----回溯法基础
摘要:本文介绍了回溯法的基础概念及Python实现,以组合问题为例展示了回溯算法的应用。通过定义Solution类中的combine方法,使用递归回溯生成所有可能的k数字组合。核心思路是利用path列表记录当前组合路径,当路径长度满足条件时保存结果,并通过回溯(添加和移除元素)实现不同组合的探索。该代码从数字1开始回溯,最终返回所有有效的数字组合。
2025-06-11 21:13:09
436
原创 算法学习day8----python数据结构-单链表
链表是一种动态数据结构,由节点构成,每个节点包含数据和指向下一节点的指针。与数组相比,链表具有动态大小、插入删除高效的特点,但访问速度较慢。链表分为单向、双向和循环链表。文章介绍了单向链表的Python实现,包括节点类(LNode)和链表类(LList),以及头插法、尾插法和一般位置插入的操作方法。关键优势在于不需要预分配空间,修改数据时只需调整指针,适合频繁修改的场景。
2025-06-08 20:44:43
581
原创 算法学习day6----双指针-判断子序列
摘要:题目要求判断序列a是否为序列b的子序列(保持元素顺序)。给定长度n和m的整数序列a和b,使用双指针法进行匹配:指针i遍历a,指针j遍历b,当元素匹配时i和j同时前进,否则仅j前进。若i成功遍历完a,则输出"Yes",否则输出"No"。示例输入3 5,a=[1,3,5],b=[1,2,3,4,5]时输出"Yes"。该方法时间复杂度为O(m),适用于n≤m≤10^5的规模。
2025-06-05 19:22:59
309
原创 算法学习day6----双指针-数组元素目标和
摘要:给定两个升序数组A和B,以及目标值x,要求在O(n+m)时间内找到满足A[i]+B[j]=x的唯一下标对(i,j)。使用双指针法,分别从数组A的头部和B的尾部开始遍历,根据当前和与x的关系移动指针,直到找到目标对。输入示例展示了该算法的执行过程,最终输出正确下标(1,1)。该方法高效且保证在数组长度不超过1e5时快速求解。
2025-06-05 18:25:24
161
原创 算法学习day5----区间和
摘要:本文分析了离散化算法中序号从1开始的原因及其实现方法。通过二分查找将原始数据映射到1-based索引,确保与前缀和数组对齐。具体步骤包括:排序去重建立索引列表,二分查找定位坐标后加1转化为1-based序号,构建前缀和数组用于快速区间查询。关键点在于1-based索引能避免边界错误,使前缀和计算更直观(s[r]-s[l-1])。示例展示了输入坐标如何正确映射为1至N的离散序号。
2025-06-03 18:00:45
899
原创 算法学习day4----差分
这是一段实现区间增量操作的Python代码。它通过差分数组技巧高效处理多个区间修改请求,最后将修改应用到原始数组上。程序首先读取初始数组和操作次数,然后对每个操作[l,r,c]在差分数组上进行区间更新,通过前缀和还原最终修改值,最后与原始数组相加输出结果。该算法将原本O(mn)的复杂度优化为O(n+m),特别适合大规模数据修改的场景。
2025-06-02 08:00:00
108
原创 算法学习day3----前缀-前缀和
这段Python代码实现了一个前缀和查询系统。首先读取整数n和m,然后输入n个数字构建数组。通过计算前缀和数组s,其中s[i]表示前i个元素的和。定义查询函数qianzhuihe(l,r)计算区间[l,r]的和,即s[r]-s[l-1]。最后循环m次处理查询,每次输入区间范围l和r,输出该区间的和。代码利用前缀和优化了区间求和操作,使每次查询时间复杂度降为O(1)。
2025-06-01 13:34:43
121
原创 算法学习day3----快速排序-第k个数
该代码实现了快速选择算法,用于在未排序数组中找到第k小的元素。算法通过选取基准值将数组分为左右两部分,根据k值所在位置决定递归处理左半部或右半部,平均时间复杂度为O(n)。代码包含边界条件处理、双指针分区逻辑和递归调用。输入为数组长度n、目标排名k及数组元素,输出为数组中第k小的数。算法优化了传统排序方法,特别适合大规模数据中的顺序统计问题。
2025-06-01 11:30:05
98
原创 算法学习day2----归并排序-逆序对的数量
开这个号的原因在于想记录一下自己学习算法的过程,同时,教学向的学习也能够让自己更容易注意到代码中的细节,其次有存档记录备份的意味。先上代码,随后是手写笔记。
2025-05-30 21:34:59
206
原创 算法学习day1----二分-立方根
摘要:本文介绍了一个使用二分法求立方根的Python实现。代码通过循环缩小搜索范围,当区间长度小于1e-7时终止,返回左边界值以确保精度。输入值为浮点数n,输出保留6位小数。文章还展示了三种格式化输出方法,并解释了为何选择返回左边界值更安全:因为它更接近目标值,而右边界可能因条件判断而稍偏离。该算法在[-10000,10000]范围内有效寻找立方根。
2025-05-30 19:36:21
201
原创 算法学习day1----二分-数的范围
该代码实现了一个二分查找算法,用于在有序数组中查找目标值的起始和结束位置。程序首先读取数组长度和查询次数,然后输入一个有序数组。对于每个查询,使用两次二分查找:第一次找到目标值的首次出现位置,第二次找到最后一次出现位置。若目标值不存在,则输出"-1 -1"。该算法通过调整左右边界和中间点计算,高效实现了范围查找功能,时间复杂度为O(log n)每次查询。
2025-05-30 15:06:39
157
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人