
算法
文章平均质量分 74
算法小练习,尽量常更新,有更好的解法,欢迎在评论区指正
m0_dawn
add oil
展开
-
(蓝桥杯——10. 小郑做志愿者)洛斯里克城志愿者问题详解
小郑是一名大学生,她决定通过做志愿者来增加自己的综合分。她的任务是帮助游客解决交通困难的问题。洛斯里克城是一个六朝古都,拥有 N 个区域和古老的地铁系统。地铁线路覆盖了树形结构上的某些路径,游客会询问两个区域是否可以通过某条地铁线路直达,以及有多少条这样的线路。小郑需要快速回答这些问题,否则可能会失去志愿者工时。每条地铁线路覆盖了树上某两点之间的最短路径。对于任意两点 u 和 v,可以通过向上跳转的方式找到它们的最近公共祖先(LCA)。希望这篇文章能帮助你理解这道题的解法!如果还有疑问,请随时提问!原创 2025-02-18 22:21:12 · 994 阅读 · 0 评论 -
BFS广度优先搜索——994.腐烂的橘子
通过 BFS 逐层处理腐烂橘子,精确模拟感染过程并统计时间。代码通过队列管理腐烂橘子,利用判断是否全部腐烂,最终返回结果。此方法高效且直观,是处理网格扩散问题的经典方案。原创 2025-02-17 21:14:28 · 596 阅读 · 0 评论 -
(算法竞赛)图论+DFS深搜——图的dfs遍历1
时间复杂度:邻接矩阵的DFS时间复杂度为 O(n²),本题顶点数较小(n ≤ 15),完全可行。空间复杂度:使用邻接矩阵存储图,空间复杂度为 O(n²)。递归特点:代码简洁,但需注意递归深度。本题数据规模下无需担心栈溢出。此解法严格遵循DFS的遍历规则,并通过编号顺序确保邻接点的访问顺序,适合初学者理解DFS的基本原理。原创 2025-02-06 22:08:24 · 509 阅读 · 0 评论 -
数据结构与算法之图(Graph)详解
图(Graph)是由**顶点(Vertex)和边(Edge)**组成的非线性数据结构,用于表示多对多关系。G = (V, E)V:顶点集合(Nodes)E:边集合(Edges)维度DFSBFS数据结构栈(递归/显式栈)队列空间复杂度O(h)(h为树高)O(w)(w为最大宽度)适用场景路径存在性检测、拓扑排序最短路径、层次遍历解的特点可能找到非最优解保证找到最短路径(无权图)学习建议理解两种搜索的本质区别掌握邻接表/矩阵的转换方法熟练使用队列和栈的实现。原创 2025-02-06 21:29:14 · 1174 阅读 · 0 评论 -
(算法竞赛)使用广度优先搜索(BFS)解决迷宫最短路径问题
Python复制# 定义方向数组dx = [0, 0, 1, -1] # 行变化(右、左、下、上)dy = [1, -1, 0, 0] # 列变化这两个数组定义了四个可能的移动方向:右、左、下、上。通过索引i,可以从dx和dy中获取对应方向的行和列偏移量。本文通过详细解析基于 BFS 的代码,展示了如何高效地解决迷宫最短路径问题。BFS 的逐层扩展特性使其成为解决此类问题的理想选择。通过合理使用队列和访问标记数组,代码能够高效地找到从起点到终点的最短路径,而不会出现超时问题。原创 2025-01-24 23:06:30 · 1170 阅读 · 0 评论 -
(算法竞赛)DFS深搜5——卒的遍历问题解析与代码实现
这段代码通过深度优先搜索(DFS)递归实现了从棋盘左上角到右下角的所有路径搜索,并为每条路径编号。它展示了递归算法在路径搜索问题中的应用,同时体现了回溯机制的重要性完整代码# 如果到达右下角,输出路径并返回return count+1 # 返回下一个路径编号# 标记当前格子为已访问# 尝试向下或向右移动# 回溯,撤销当前格子的访问标记return count # 返回当前路径编号# 输入棋盘大小# 初始化方向数组(向下和向右)# 初始化访问标记数组# 从左上角开始搜索,初始路径编号为1。原创 2025-01-24 21:17:26 · 332 阅读 · 0 评论 -
(算法竞赛)DFS深搜4——迷宫第一条路问题解析与代码实现
这段代码通过深度优先搜索(DFS)递归实现了从迷宫入口到出口的路径搜索。它利用了递归的回溯机制,避免了重复访问格子,并通过方向数组实现了按顺序搜索。完整代码# 如果到达右下角,输出路径并返回# 标记当前格子为已访问# 将当前格子加入路径# 如果当前路径不可行,回溯# 输入迷宫大小# 输入迷宫矩阵# 初始化访问标记数组# 从左上角开始搜索。原创 2025-01-24 21:10:18 · 640 阅读 · 0 评论 -
(算法竞赛)DFS深搜3——数池塘问题解析与代码实现
这道题考察了深度优先搜索(DFS)的应用,适用于解决连通块计数问题。通过递归实现DFS,可以高效地标记每个池塘中的所有积水格子,并统计池塘的数量。希望这篇文章能帮助你更好地理解和解决类似问题。原创 2025-01-22 19:14:25 · 433 阅读 · 0 评论 -
(算法竞赛)DFS深搜2——迷宫出口问题解析与代码实现
如果起点或终点有一个不能通行(值为 1),则认为无法到达。最后一行包含四个整数 ha,la,hb,lb,分别表示起点 A 的行和列,终点 B 的行和列。:使用队列实现,更适合迷宫路径搜索,可以找到最短路径(虽然本题不需要最短路径)。这是一个典型的迷宫路径搜索问题,可以通过**深度优先搜索(DFS)第一行是一个正整数 n(1≤n≤100),表示迷宫的规模。接下来是一个 n×n 的矩阵,矩阵中的元素为 0 或 1。如果起点或终点的值为1(表示不能通行),直接输出。:如果起点或终点为 1(不能通行),直接输出。原创 2025-01-22 19:05:19 · 872 阅读 · 0 评论 -
(算法竞赛)深搜与回溯1——扫地机器人问题解析与代码实现
通过模拟机器人的移动规则,我们可以高效地生成清扫顺序。:这是一个经典的“深度优先搜索”(DFS)问题,机器人按照特定规则在网格中移动,类似于“螺旋矩阵”的生成。机器人从 (1,1) 开始,依次向右移动,清扫顺序为 1, 2, 3, 4。要求输出清扫完成后的网格,其中每个位置的值表示机器人清扫该位置的顺序。如果当前位置的右边(同一行,下一列)没有被清扫过,它会向右移动。,并初始化所有值为 0。一个 n×m 的网格,每个位置的值表示机器人清扫该位置的顺序。无法向右移动时,向下移动,清扫顺序为 5。原创 2025-01-20 21:06:04 · 479 阅读 · 0 评论 -
《贪心算法:原理剖析与典型例题精解》
贪心算法是一种在每一步选择中都采取当前状态下最优(即最有利)的选择,从而希望导致结果是全局最优的算法。它的核心思想是“贪心”,即在解决问题的过程中,总是做出局部最优的选择,希望通过一系列局部最优的选择来达到全局最优解。举个简单的例子,假设你面前有一堆硬币,有1元、5角、1角等不同面值,现在需要凑出3元7角。贪心算法的思路就是先选择面值最大的硬币,也就是1元硬币,尽可能多地拿,直到不能再拿为止。然后选择次大的5角硬币,继续尽可能多地拿……按照这种贪心的策略,最终可以凑出所需的金额。原创 2025-01-17 23:45:09 · 1630 阅读 · 0 评论 -
算法(蓝桥杯)贪心算法7——过河的最短时间问题解析
过河的最短时间问题是一个典型的优化问题,通过合理安排过桥顺序,可以有效减少总时间。在解决此类问题时,需要仔细分析不同策略的优劣,并通过编程实现最优解。希望本文的解答和代码分析能帮助你更好地理解和解决这个问题。原创 2025-01-17 23:44:17 · 2918 阅读 · 0 评论 -
算法(蓝桥杯)贪心算法5——删数问题的解题思路
通过维护一个单调递增的栈,我们可以有效地找到删除s个数字后得到的最小数。这种方法的时间复杂度为O(n),其中n是输入数字的长度,因为每个数字最多只会被入栈和出栈一次。希望这个解释能帮助你更好地理解这个问题的解法。如果有任何疑问,欢迎继续提问。原创 2025-01-17 20:41:43 · 568 阅读 · 0 评论 -
算法(蓝桥杯)贪心算法3——二维数组排序与贪心算法——活动选择
这段代码通过读取用户输入的二维数组,按照数组的第二列进行排序,然后根据特定条件(第一个元素不小于前一个满足条件的元素的第二个值,且第二个值不为0,若为0则视为24)对数组中的元素进行计数,最终输出满足条件的元素数量。这种处理方式在一些特定的业务场景中非常实用,例如在处理时间区间、资源分配等问题时,可以根据特定的排序和计数规则来得到所需的结果。原创 2025-01-16 22:04:45 · 1191 阅读 · 0 评论 -
算法竞赛(蓝桥杯)贪心算法2——需要安排几位师傅加工零件
通过降序排序和逐步求和的方法,我们可以高效地找到一个子集,使其和尽可能接近但不超过目标和m。这种方法的时间复杂度为 O(n log n),主要由排序操作决定。希望这篇文章能帮助你更好地理解这段代码的工作原理和实现细节。如果有任何问题,欢迎继续提问。原创 2025-01-15 23:36:15 · 394 阅读 · 0 评论 -
算法竞赛(蓝桥杯)贪心算法1——数塔问题
通过自底向上的动态规划方法,我们可以高效地求解数字三角形的最大路径和。这种方法的时间复杂度为 O(n^2),适用于处理较大规模的数字三角形。希望这篇文章能帮助你更好地理解这段代码的工作原理和实现细节。完整代码a=[]for j in range(i+1):# 确保遍历第j行有i个元素,因为range(0)无法进入循环。原创 2025-01-15 22:45:53 · 3149 阅读 · 0 评论 -
算法竞赛(蓝桥杯)前缀和差分——小 X 与煎饼达人(flip)
这段代码通过差分数组和前缀和的技巧,高效地处理了区间更新操作,并统计了数组中奇数的数量。翻的次数为偶数则说明处于原理的状态,翻的次数为奇数则说明为原来的状态的反面,这种方法在处理大量数据时具有显著的性能优势。原创 2025-01-15 21:46:20 · 446 阅读 · 0 评论 -
(蓝桥杯)使用差分数组和前缀和解决区间更新问题——倒水
通过使用差分数组和前缀和,我们可以高效地进行区间更新操作。差分数组允许我们在 O(1) 时间内完成每次区间更新,而前缀和则可以在 O(n) 时间内还原出最终的数组。这种方法的时间复杂度为 O(n + k),适用于大规模数据。原创 2025-01-15 01:02:43 · 1203 阅读 · 0 评论 -
(蓝桥杯)二维数组前缀和典型例题——子矩阵求和
张老师问了小 A 同学 k 个问题,每个问题会先告知小 A 同学 4 个数 x1,y1,x2,y2画出一个子矩阵,张老师请小 A同学计算出这个子矩阵中所有数的和。小 A 同学有着很强的计算能力,张老师为了检验小 AA同学的计算能力,写了一个 n 行 m 列的矩阵数列。是一个更底层的输入函数,它直接从标准输入读取一行数据,并返回一个字符串,包括行尾的换行符。是一个更底层的输出函数,它直接将字符串写入标准输出,不会自动添加换行符。使用起来非常方便,但在处理大量输入数据时,它的性能可能会比较差。原创 2025-01-14 01:09:04 · 933 阅读 · 0 评论 -
算法(蓝桥杯)贪心算法4——拦截导弹的系统数量求解
这道题包含了能拦截和不能拦截两种情况,不能拦截就要加多一个系统,能拦截指的是所有的系统里面有一个能拦截就能拦截;一开始最容易想到来判断我上面说的能不能拦截的条件就是目前的导弹发射高度是否大于上一个的高度,但是这个想法是不准确的,能不能拦截这个问题是动态的,可能第一个系统不能,但是第二个系统就能了,所以仅仅通过a[i]与b[j]的大小判断来作为能不能拦截的条件是不准确的,此处引入p来作为能不能拦截的条件变量,通过循环遍历每套系统拦截的最高高度数组,判断每一个系统是否能够拦截当前导弹。原创 2025-01-12 23:15:07 · 537 阅读 · 0 评论 -
算法练习6——统计大写英文字母的个数
算算以 '..' 结束的一串字符中含有多少个大写的英文字母。输入一串字符(长度不超过 80),以 '..' 结束。输出一行,即这串字符中大写字母的个数。原创 2025-01-11 22:41:56 · 372 阅读 · 0 评论 -
算法练习5——我是第几个单词
接着再输入一个单词 A ,请找出首次在句子中出现的与 A 相同的单词,是句子中的第几个单词,若不存在,则输出该句子中单词字符的总个数。结束的一个词组(仅由若干个大小写字母组成的单词构成,单词间由一空格隔开,除单词和最后的。以外,不含其它字符,句子总长度不超过 800,每个单词长度不超过 90 个字符)这道题选择了一个比较狡猾的写法,大家有更好的解法欢迎补充。来作为结束符号的,并且单词之间以一个空格来分隔。第二行是一个单词(不含空格,长度不超过 90)。例如对上句子而言,若输入单词。原创 2025-01-11 22:34:48 · 273 阅读 · 0 评论 -
算法练习4——一个六位数
这道题特别妙大家仔细做一做我这里采用的是动态规划来解这道题结合题目要求找出数与数之间的规律抽象出状态转移方程。原创 2025-01-11 22:28:39 · 584 阅读 · 0 评论 -
算法练习3——空心六边形
画图形,是我们需要研究的一个重要课程。菱形好似练的差不多了啊。那么,什么东西,能够有些新意呢?弄个漂亮点的图形吧,空心六边形进入了我们的视线。那么我们就打印一个正六边型吧。只有一个正整数 n(0<n<20),代表正六边形的边长。根据输入的边长,输出对应大小的正六边型。是一个边长为n的正多边形。原创 2025-01-11 00:36:42 · 278 阅读 · 0 评论 -
算法练习2——数组逆序
第二行 n 个整数(空格隔开)(这些数在 0∼10的6次方 之间)。第一行一个整数 n (3≤n≤100)代表数的个数。给你 n个整数,将其逆序输出。n 个整数(空格隔开)。原创 2025-01-11 00:28:11 · 226 阅读 · 0 评论 -
算法练习1——数字正三角
一个整数(0原创 2025-01-09 23:34:09 · 160 阅读 · 0 评论