- 博客(1477)
- 收藏
- 关注

原创 机试真题目录
**2024年8月份,华为官方已经将华为OD机考:OD统一考试(D卷)切换到 OD统一考试(E卷)** 。从参加过华为OD笔试的朋友来看,**E卷的新题非常少,大部分是A,B,C,D卷的合并题库。** 另一方面据考生反应需要双机位,也就是在牛客小程序中一直点确认,最后一步需要调试并开启您的摄像头。
2023-11-30 14:28:44
55641
24
原创 【2025年小红书秋招-8月20日-第三题(300分)- 收藏夹杂乱度】(题目+思路+Java&C++&Python解析+在线测试)
题目解析 问题分析 我们需要将n条Plog分成若干收藏夹,每个收藏夹中的Plog点赞数必须构成连续递增序列,且每个收藏夹的杂乱度由其中杂乱度最大的Plog决定。目标是使所有收藏夹的杂乱度之和最小。 关键思路 分组处理:将相同点赞数的Plog分组,并按点赞数排序 贪心策略:从高点赞数开始,尽可能构建长的连续序列 优化计算:在构建收藏夹时,总是取当前组中最大的杂乱度来最小化总和 算法选择 使用哈希表存储每个点赞数对应的杂乱度列表 对每个点赞数的杂乱度列表进行排序 从最高点赞数开始,尝试构建尽可能长的连续序列 每
2025-08-21 10:49:03
3
原创 【2025年小红书秋招-8月20日-第二题(200分)- 强迫症】(题目+思路+Java&C++&Python解析+在线测试)
这篇文章探讨了如何通过最少的操作将一个二进制字符串转换为回文串的问题。关键思路是分析字符串中需要匹配的位置对,标记不匹配的位置,并计算这些不匹配位置形成的连续段数。每次操作可以翻转一段连续的区间,从而消除这些不匹配段。最终的最小操作次数即为这些不匹配连续段的数量。文章提供了C++、Python和Java三种语言的实现代码,时间复杂度为O(n),适用于大规模数据输入。
2025-08-21 10:47:43
2
原创 【2025年小红书秋招-8月20日-第一题(100分)- 小红薯的好数】(题目+思路+Java&C++&Python解析+在线测试)
题目摘要 题目要求判断一个数的所有本质不同质因子之和是否为奇数。给定多组测试数据,每组输入一个整数n,若n的所有不同质因子之和为奇数则输出"YES",否则输出"NO"。 关键点: 预处理素数表,使用埃氏筛法生成所有不超过√10^9的素数 对每个数n进行质因数分解,累加不同的质因子 判断累加和的奇偶性 特殊处理n=1的情况(视为0) 样例: 输入3个数2、5、12,输出分别为NO、YES、YES,因为: 2的质因子和2是偶数 5的质因子和5是奇数 12的质因子和2+3=
2025-08-21 10:45:35
原创 【2025年百度秋招-8月19日-第二题(200分)- 小周买盒饭】(题目+思路+Java&C++&Python解析+在线测试)
摘要:题目要求判断在给定盒饭种类和美味度的情况下,是否存在一个非全选的连续区间,其美味度之和不小于全选的总和。通过Kadane算法计算前n-1和后n-1个元素的最大子段和,若其中任一结果不小于总和,则输出"Yes",否则输出"No"。算法时间复杂度为O(n),适用于每组数据。
2025-08-20 11:38:28
125
原创 【2025年百度秋招-8月19日-第一题(100分)- 小A删数字】(题目+思路+Java&C++&Python解析+在线测试)
题目要求删除数组中的部分元素(不能全删),使剩余数组的权值(相邻元素差绝对值和)不变,求最多可删除的元素数量。 关键思路是:删除不影响权值的中间元素。具体来说,对于连续三个单调(非严格递增或递减)的元素,中间元素可以安全删除。因此,只需保留数组的首尾端点和所有拐点(峰值或谷值),其余均可删除。 算法步骤: 初始化栈结构,保留数组首元素 遍历数组,若当前元素与栈顶元素相同则跳过 若当前元素与栈顶元素构成单调序列,则弹出栈顶元素(可删除) 否则将当前元素压入栈(需保留) 最终n-栈长度即为可删除的最大数量 时间
2025-08-20 11:37:29
6
原创 【2025年钉钉秋招-8月19日-第三题(300分)- 未来超级城市的拥堵】(题目+思路+Java&C++&Python解析+在线测试)
摘要 题目描述了一个未来超级城市的交通路径规划问题。给定起点和终点坐标,以及多个矩形拥堵区域及其通过时间,要求计算避开或穿过拥堵区域的最短行驶时间。解题思路包括:1) 离散化坐标,只保留关键点;2) 构建水平/垂直边邻接表;3) 根据中点判断边权值;4) 使用Dijkstra算法求最短路。样例输入包含4个拥堵区域,输出192为最优解。 核心步骤:压缩坐标→建图→计算边权→Dijkstra求最短路。时间复杂度主要由Dijkstra算法决定,适用于稀疏图。
2025-08-20 11:35:23
88
原创 【2025年钉钉秋招-8月19日-第二题(200分)- 重复元素数组】(题目+思路+Java&C++&Python解析+在线测试)
本文提出了一种高效算法,用于将包含重复元素的数组转换为不重复数组。通过使用带路径压缩的并查集数据结构,算法能够快速找到每个元素应调整到的最小可用值。具体来说,对于数组中的每个元素,我们从其初始值开始,查找并标记第一个未被使用的整数,确保全局唯一性。该方法在$O(N,\alpha(U))$时间内完成转换,其中$U$为值域范围,适用于大规模输入($N \leq 10^5$)。代码实现提供了C++、Python和Java三种语言版本,均采用相同的高效策略。
2025-08-20 11:34:26
1
原创 【2025年钉钉秋招-8月19日-第一题(100分)- 奇特王国】(题目+思路+Java&C++&Python解析+在线测试)
题目要求将一组正整数排列组合成最大的数字字符串。关键思路是将数字转为字符串后,自定义排序规则:对于任意两个字符串a和b,若a+b>b+a则a排在前面。排序后拼接所有字符串即为最优解。需注意全0情况直接返回"0"。该解法时间复杂度为O(n log n),适用于大规模数据。
2025-08-20 11:33:04
1
原创 【2025年小红书秋招-8月17日-第三题(300分)- 星际能量枢纽】(题目+思路+Java&C++&Python解析+在线测试)
题目要求统计所有能量节点区间中,累计能量最大峰值等于临界值k的区间数量。通过预处理前缀和数组,结合哈希表和线段树进行高效查询,可以快速定位满足条件的区间。具体来说,对每个起始位置l,计算目标值T=P[l-1]+k,使用哈希表存储前缀和位置以便快速查找等于T的位置,同时用线段树查询第一个大于T的位置,从而确定满足条件的区间范围。这种方法的时间复杂度为O(n log n),适合处理大规模输入。代码实现中分别提供了Python、Java和C++版本,利用线段树和二分查找优化查询效率。
2025-08-18 11:20:12
79
原创 【2025年小红书秋招-8月17日-第二题(200分)- 排队进行】(题目+思路+Java&C++&Python解析+在线测试)
摘要 本文研究了Plog队列互评问题。给定一个由0和1组成的字符串表示Plog属性,每轮操作中每个Plog会向右评论第一个异属性Plog,然后移除所有被评论的Plog,直到无法继续。通过将字符串分段处理,发现只需计算偶数段的最大值T,最终未被评论的Plog数量为首段长度加上奇数段中超过T的部分。总被评论数即为总长度减去幸存长度。算法时间复杂度为O(n),适用于大规模数据(n≤10^5)。提供了C++、Python和Java三种语言的实现方案。
2025-08-18 11:19:17
17
原创 【2025年小红书秋招-8月17日-第一题(100分)- 冲突约束】(题目+思路+Java&C++&Python解析+在线测试)
这篇题解解决了一个关于数组元素删除操作的问题,要求保留尽可能多的元素,同时保证剩余元素之间不存在观点相近的关系(即差值不超过给定阈值d)。 方法思路 排序数组:首先对数组进行排序,以便后续处理。 贪心选择:使用贪心算法,从排序后的数组中选择尽可能多的元素,这些元素之间的差值必须大于d。具体步骤是:维护一个“上一个保留的元素”变量,遍历数组时,如果当前元素与上一个保留元素的差值大于d,则保留该元素并更新“上一个保留的元素”。 奇偶性调整:由于每次操作只能删除两个元素,最终保留的元素数量必须与原数组长度的奇偶性
2025-08-18 11:18:08
13
原创 【2025年大疆秋招-8月17日-第二题(200分)- 二叉树的直径】(题目+思路+Java&C++&Python解析+在线测试)
本文探讨了如何计算二叉树的直径。二叉树的直径定义为树中任意两节点间最长路径的长度(边数表示)。算法采用后序遍历递归计算每个节点的左右子树深度,并维护全局直径变量。具体步骤包括:1) 构建二叉树(层序遍历);2) 递归计算每个节点的深度,更新直径;3) 时间复杂度O(n),空间复杂度O(n)。提供了C++、Python和Java三种实现。
2025-08-18 11:16:53
210
原创 【2025年大疆秋招-8月17日-第一题(100分)- 最优任务调度】(题目+思路+Java&C++&Python解析+在线测试)
本文讨论了如何计算CPU任务调度所需的最短周期数问题。给定一个任务列表和冷却周期n,要求在满足相同任务间必须有n个冷却周期的前提下,找到完成所有任务的最短时间。关键思路是:统计任务频次,最高频任务f_max和相同频次任务数k,通过公式max(tasks长度, (f_max-1)*(n+1)+k)计算最短时间。文章提供了C++、Python和Java三种实现,均采用统计频次后应用公式的方法,时间复杂度O(n),空间复杂度O(1)。样例输入输出验证了算法的正确性。
2025-08-18 11:13:58
33
原创 【2025年阿里云秋招(开发岗)-8月17日-第三题(300分)- 符文轮回咒】(题目+思路+Java&C++&Python解析+在线测试)
本文探讨了如何通过对符文序列进行一次轮回咒操作(循环右移)来最大化平滑度$S(A)=\sum^{n-1}{i=1}(A_i-A{i+1})$的问题。通过分析不同旋转区间对平滑度的影响,得出四种候选情况:原始序列的$A_1-A_n$、前缀旋转后的$\max(A)-A_n$、后缀旋转后的$A_1-\min(A)$,以及整段旋转后的相邻元素最大差值。最终结果为这四种情况中的最大值。算法时间复杂度为$O(n)$,适用于大规模数据。代码实现提供了C++、Python和Java版本,均能高效处理输入数据并输出正确结果。
2025-08-18 11:10:34
425
原创 【2025年阿里云秋招(开发岗)-8月17日-第二题(200分)- 无向树节点的最大值】(题目+思路+Java&C++&Python解析+在线测试)
树节点按位与约束最优解 方法概述 该问题要求为树节点分配非负整数,满足每条边的按位与约束,同时最大化节点值之和。采用按位分解策略,对每个二进制位独立处理: 按位分析:将30位二进制分别处理,计算每位贡献 约束类型: 边约束为1:两端点该位必须为1 边约束为0:两端点不能同时为1 强制赋值:先处理必须为1的点,再对剩余自由点求最大独立集 动态规划:在剩余森林上使用树形DP计算最大独立集 复杂度分析 时间复杂度:O(30n),线性处理每个二进制位 空间复杂度:O(n),仅需存储当前位的状态信息 示例解析 样例1
2025-08-18 11:09:35
7
原创 【2025年阿里云秋招(开发岗)-8月17日-第一题(100分)- wida的学习计划】(题目+思路+Java&C++&Python解析+在线测试)
摘要 该问题模拟了汉字学习过程中记忆衰减的动态过程,要求计算任意时刻最多掌握的未遗忘汉字数量。关键点在于: 记忆管理:每个汉字的学习记忆会随时间衰减,当记忆值降为0时遗忘; 学习规则:第x次学习同一汉字时,增加x²点记忆值; 实时维护:使用优先队列高效跟踪记忆衰减,避免线性遍历。 算法采用最小堆实时清理已遗忘汉字,并维护当前活跃汉字数量。每组数据的时间复杂度为O(n log n),适用于大规模输入。通过哈希表记录汉字学习次数和记忆值,堆结构管理遗忘时间,动态更新最大掌握数量。 样例1中因每个汉字仅出现一次,
2025-08-18 11:08:35
25
原创 【2025年阿里云秋招(算法岗)-8月17日-第三题(300分)- Tk爬榜竞赛】(题目+思路+Java&C++&Python解析+在线测试)
本文介绍了战斗狂Tk参加爬榜竞赛的问题,他需要通过击败对手来最大化击败数。关键思路是将每层选手按战斗力升序排序后拼接成序列,并计算该序列的严格递增子序列(LIS)长度。具体步骤包括:排序每层选手、按层拼接序列、使用牌堆法计算LIS长度。算法的时间复杂度为O(M log M),其中M是选手总数。最终通过维护tails数组并用二分查找确定插入位置,得到最大击败数。代码提供了C++、Python和Java的实现示例。
2025-08-17 16:14:45
7
原创 【2025年阿里云秋招(算法岗)-8月17日-第二题(200分)- 簇标签】(题目+思路+Java&C++&Python解析+在线测试)
本文实现了一个K=3的K-Means聚类算法,用于为测试样本预测簇标签。算法步骤如下:1)读取训练和测试数据;2)用训练集前3行初始化质心;3)迭代更新质心:计算样本到质心的欧氏距离并分配簇,重新计算各簇均值作为新质心(空簇保持原质心),当质心变化均小于1e-6时停止;4)将最终质心按坐标字典序排序并重编号为0/1/2;5)为测试样本计算最近质心编号并输出JSON数组。Python实现使用numpy进行向量化计算,处理了空簇情况并满足题目要求的精度和收敛条件。
2025-08-17 16:13:49
7
原创 【2025年阿里云秋招(算法岗)-8月17日-第一题(100分)- 最小区间长度】(题目+思路+Java&C++&Python解析+在线测试)
给定一个非严格递增数组,允许对任意区间执行一次操作,使区间内元素加上特定增量。目标是找到使数组出现相邻元素差值超过d的最小区间操作长度。若无需操作或无法实现,则分别输出0或-1。 方法思路: 检查原始数组:首先检查数组是否已有相邻元素差值超过d,若有则直接返回0。 单元素操作:检查是否存在单元素操作(区间长度为1)能使某相邻差值超过d。若存在,返回1。 区间操作:若无上述情况,计算需要的最小区间长度,使得操作后至少一对相邻元素差值超过d。通过遍历每个可能的相邻对,计算所需的最小操作区间长度。 解决代码: i
2025-08-17 16:12:46
8
原创 【2025年字节跳动秋招- 8月17日 -第四题(400分)- 三元组数组】(题目+思路+Java&C++&Python解析+在线测试)
题目要求统计满足条件的三元组(i,j,k)的数量,其中max(a_i-a_j, a_j-a_k)等于2*a_j。通过分析,可以将条件拆分为两种情况,并利用二分查找和哈希表统计元素频次来高效计算。将数组排序后,对每个中间元素a_j,计算满足条件的a_i和a_k的数量,最终累加得到结果。算法时间复杂度为O(n log n),适用于大规模数据。
2025-08-17 13:12:03
7
原创 【2025年字节跳动秋招- 8月17日 -第三题(300分)- 打乱数组排列】(题目+思路+Java&C++&Python解析+在线测试)
本文提出了一种贪心算法来解决数组重排问题,目标是最大化所有非空子数组最大公约数(GCD)之和。算法首先将数组中的最大值放在首位,随后每一步在剩余元素中选择能与当前前缀GCD保持最大值的元素(相等时取较大值),逐步构建排列。这种方法确保前缀GCD尽可能大且下降缓慢,从而提升整体和。该算法的时间复杂度为O(n·12),适用于大规模输入(n ≤ 2×10^5)。代码实现提供了C++、Python和Java版本,均遵循上述策略。样例验证表明该方案能有效找到最优排列。
2025-08-17 13:11:55
30
原创 【2025年字节跳动秋招- 8月17日 -第二题(200分)- 小红的“葫芦”】(题目+思路+Java&C++&Python解析+在线测试)
本文研究了如何统计数组中满足特定条件的子序列数量。题目要求找出长度为5的子序列,其中恰好包含两种元素,且出现次数分别为3次和2次(即"葫芦"序列)。通过频次统计和组合数学方法,我们避免了直接枚举所有可能子序列的低效做法。具体来说,首先统计每个元素的出现次数,然后计算相关组合数之和,最终利用公式$S_3S_2-\sum_i C(n_i,3)C(n_i,2)$快速得到结果。该方法的时间复杂度为$O(n)$,适用于较大规模的输入数据。文中还提供了C++、Python和Java三种语言的实现代码
2025-08-17 13:11:45
7
原创 【2025年字节跳动秋招- 8月17日 -第一题(100分)- 小苯的GCD疑惑】(题目+思路+Java&C++&Python解析+在线测试)
摘要 题目要求通过最多一次将数组任意区间元素乘以k的操作,最大化数组的最大公约数(gcd)。分析表明,无论选择哪个区间进行操作,最终数组的gcd最大值为k乘以原数组的gcd。因此,只需计算原数组的gcd并乘以k即可得到结果。该解法时间复杂度为O(n),适用于大规模数据。示例输入输出验证了该结论的正确性。
2025-08-17 13:11:37
35
原创 【2025年拼多多秋招-8月17日-第四题(400分)- 多多种树】(题目+思路+Java&C++&Python解析+在线测试)
该问题要求通过在已有树木之间插入最少的新树,使得没有任何连续区间的美观值之和等于给定数字M。通过分析发现,当某段区间的前缀和之差等于M时,必须在该区间后插入一棵新树来切断这种关系。具体解法是维护一个哈希集合记录当前段的前缀和,当某个新前缀和与之前某个前缀和的差为M时,立即切段并在该位置插入一棵新树,重新开始统计新段的前缀和。这种方法确保每段内部和跨段区间都不会出现和为M的情况,且插入的树数量最少。算法的时间复杂度为O(N),适用于大规模数据。
2025-08-17 13:11:26
13
原创 【2025年拼多多秋招-8月17日-第三题(300分)- 闯关游戏】(题目+思路+Java&C++&Python解析+在线测试)
这道题目要求在一系列连续关卡中,找到满足总积分达到目标值且最大难度最小的连续段。解题思路是使用二分法确定可能的最大难度,并通过滑动窗口检查是否存在满足条件的连续关卡段。 方法思路: 二分搜索:在可能的难度范围(1到最大难度值)内进行二分查找,确定满足条件的最小最大难度。 滑动窗口判断:对于每个中间值mid,检查是否存在连续段,其中所有关卡的难度不超过mid且总积分至少为T。使用滑动窗口累积积分,遇到难度超过mid的关卡时重置窗口。 解决代码: import sys def main(): n, T = ma
2025-08-17 13:11:17
13
原创 【2025年拼多多秋招-8月17日-第二题(200分)- 多多的果园】(题目+思路+Java&C++&Python解析+在线测试)
摘要 题目描述了一个果园管理者在收获季面临的选择问题:每天有不同食量的小动物到来,接纳它们需要消耗总果实量(每日食量乘以剩余天数)。目标是在总果实量X的限制下,最大化接纳的小动物数量。 解题思路是将问题转化为0-1背包问题,其中每个物品的重量为小动物的总消耗量,价值均为1。通过贪心策略,优先选择总消耗量小的动物。具体步骤包括:计算每只动物的总消耗,过滤掉无法满足的,排序后依次累加直到容量耗尽。 算法复杂度为O(n log n),适用于大规模数据。代码实现展示了如何高效处理输入、计算权重、排序和累加计数,最终
2025-08-17 13:11:10
15
原创 【2025年拼多多秋招-8月17日-第一题(100分)- 满减活动】(题目+思路+Java&C++&Python解析+在线测试)
题目要求计算在n个商品中,有多少对商品的价格之和是m的倍数。每个商品只能被选一次,且最多选两个商品。 方法思路: 余数统计:首先计算每个商品价格对m取模的余数,统计每个余数出现的次数。 配对计算: 余数为0的商品可以两两配对,组合数为C(cnt[0], 2)。 对于余数r和m-r的商品,它们的价格之和是m的倍数,组合数为cnt[r] * cnt[m-r]。 若m为偶数,余数为m/2的商品可以两两配对,组合数为C(cnt[m/2], 2)。 结果汇总:将所有符合条件的组合数相加,最终结果对998244353取
2025-08-17 13:11:02
9
原创 【2025年京东秋招- 8月16日 -第二题(200分)- 跳水评分】(题目+思路+Java&C++&Python解析+在线测试)
摘要 题目要求从n位裁判的连续m个打分中,去掉最高和最低分后求平均值,找出使平均值最大的起始位置。通过滑动窗口算法,维护窗口和、单调队列(分别记录当前窗口的最小值和最大值),在O(n)时间内高效解决问题。具体实现时,窗口每移动一步就更新和值与极值队列,比较当前窗口的(sum - min - max)值并记录最优解。代码提供了Python、Java和C++三种语言的实现,均采用相同思路,确保在最优复杂度内完成计算。
2025-08-17 11:19:01
10
原创 【2025年京东秋招- 8月16日 -第一题(100分)- 减小逆序对】(题目+思路+Java&C++&Python解析+在线测试)
本文研究了如何通过至多一次区间加1操作来最大化减少序列的逆序对数量。关键结论是:操作收益等于被消去的逆序对数减去新增的逆序对数,其中被消去的对数来自区间左侧较大值与区间内较小值的配对,而新增对数来自区间内元素与右侧相同值的配对。通过从右到左扫描数组,动态维护"未处理"和"已处理"元素的统计值,可以线性时间复杂度计算最优解。算法使用两个数组rest和put分别记录未处理元素和已处理元素的值分布,在扫描过程中实时更新当前收益并记录最大值。该方法的时间复杂度为O(n),空间
2025-08-17 11:18:52
11
原创 【2025年美团秋招(算法岗)- 8月16日-第四题(400分)- 三元组数组】(题目+思路+Java&C++&Python解析+在线测试)
本文提出了一种高效计算数组中特定三元组(i,j,k)数量的算法,要求满足1≤i<j<k≤n且a_i>a_k>a_j。该问题通过以下步骤解决: 使用树状数组统计每个元素右侧小于a_i的元素数量cnt_i,并累加C(cnt_i,2)作为初步结果A,其中包含有效三元组和无效情况。 通过预处理统计每个元素j左侧大于a_j的元素数量pre_j和右侧小于等于a_j的元素数量suf_j,计算无效情况总和B=Σ(pre_j*suf_j)。 最终结果为A与B的差值,精确去除了无效情况。 算法采用三次树
2025-08-17 11:18:41
9
原创 【2025年美团秋招(算法岗)- 8月16日-第三题(300分)- 奇幻王国魔法石】(题目+思路+Java&C++&Python解析+在线测试)
本文研究了在具有魔法石影响的奇幻王国中,寻找从城市1到城市n的最短路径问题。通过分层图模型(按使用好魔法石次数分层),结合Dijkstra算法处理每层内的非负权边和跨层的负权边转移。算法依次处理0到k次好石使用情况,每层内通过Dijkstra计算最短路径,并利用跨层转移考虑新增一次好石使用的最优解。最终取各层到达目标城市的最小值作为答案,若无法到达则输出"NO"。该解法时间复杂度为O(k*(m+nlogn)),有效解决了带次数限制的负权边最短路问题。
2025-08-17 11:18:29
8
原创 【2025年美团秋招(算法岗)- 8月16日-第二题(200分)- 高斯朴素贝叶斯】(题目+思路+Java&C++&Python解析+在线测试)
本文介绍了如何使用NumPy和Pandas手动实现高斯朴素贝叶斯分类器。主要步骤包括:1)读取并解析JSON格式的训练和测试数据;2)计算每个类别的先验概率及特征的均值与方差;3)对测试样本计算对数后验概率并进行类别预测。实现中特别处理了方差为零的情况,将其替换为极小值1e-9以避免除零错误。最终以JSON数组形式输出预测结果,保持与输入测试样本相同的顺序。该算法时间复杂度为O(nm)训练和O(tmC)预测,其中C为类别数。
2025-08-17 11:18:20
8
原创 【2025年美团秋招(算法岗)- 8月16日-第一题(100分)- 非负整数数组】(题目+思路+Java&C++&Python解析+在线测试)
这篇文章探讨了一个关于数组操作和位运算的问题。给定一个数组,我们需要找到一个非负整数x(x的二进制位数不超过数组中最大值的二进制位数),通过一系列操作使得数组元素总和最大化。操作包括选择一个元素,将其与x进行按位或运算,同时将x更新为该元素与x的按位与结果。 关键结论是:要使总和最大,初始x应为数组元素按位与的补码(mask XOR A),其中mask是2^L-1(L是最大值的二进制位数),A是数组元素的按位与。此时最大总和等于原数组元素和加上x的值。 该问题通过位运算的巧妙应用,证明了在特定约束下如何高效
2025-08-17 11:18:09
14
原创 【2025年虾皮秋招-8月16日-第一题(100分)- 二分图】(题目+思路+Java&C++&Python解析+在线测试)
摘要: 本文介绍了如何判断一个无向图是否为二分图。二分图的定义是能够将其节点划分为两个独立子集,使得每条边的两个顶点属于不同子集。核心算法采用BFS/DFS遍历图,通过染色法检测是否存在冲突(即相邻节点颜色相同)。若整个图遍历过程中未发现冲突,则为二分图。文章提供了Python、Java和C++三种语言的实现代码,时间复杂度为O(n+m),空间复杂度为O(n+m)。该方法适用于处理可能不连通的图,并确保正确识别奇环的存在。
2025-08-16 20:29:26
165
原创 【2025年虾皮秋招-8月16日-第三题(300分)- 快递站覆盖区域】(题目+思路+Java&C++&Python解析+在线测试)
这篇文章摘要如下: 该问题研究如何通过建立一个新的配送站来最大化连通区域面积。给定一个由0和1组成的矩阵(1表示覆盖区域),需要找到一个0位置将其变为1,使得相邻1区域能连成最大连通块。算法分为三步:1) 使用深度优先搜索标记现有1连通块并记录各块大小;2) 枚举每个0位置,计算其连接不同邻接块后的总大小;3) 若无0位置则返回整个矩阵面积。时间复杂度为O(nm),适用于30×30以内的矩阵。样例输入[[1,0],[0,1]]输出3,说明翻转任意0可连接两个1区域。
2025-08-16 20:29:14
10
原创 【2025年虾皮秋招-8月16日-第二题(200分)- 反转字符串】(题目+思路+Java&C++&Python解析+在线测试)
本文介绍了一种算法,用于反转字符串中的小写字母,同时保持其他字符位置和单词顺序不变。算法核心是使用双指针技术:对每个单词单独处理,左指针从左向右、右指针从右向左扫描,遇到小写字母则交换位置,非小写字母则跳过。该方法时间复杂度为O(n),空间复杂度为O(1),适用于包含大小写字母、数字和空格的字符串。文章提供了Python、Java和C++三种语言的实现代码,均遵循相同的双指针处理逻辑,确保单词间空格保留不变。
2025-08-16 20:28:45
11
原创 【2025年阿里淘天秋招(算法岗) - 8月16日 -第三题(300分)- 工资方差】(题目+思路+Java&C++&Python解析+在线测试)
题目要求处理员工工资的区间方差查询和单点修改操作。摘要如下: 给定长度为n的工资序列和q次操作,操作分为两类: 修改某员工工资 查询区间工资方差 解题思路: 利用方差公式Var = E[X²] - (E[X])²,通过维护区间和与平方和来计算方差 使用两个树状数组分别维护区间和与平方和 单点修改时同步更新两个树状数组 区间查询时计算均值与方差 时间复杂度O((n+q)logn),空间复杂度O(n),适用于大规模数据。 代码实现要点: 使用树状数组高效处理区间查询和单点更新 注意数值精度处理,避免计算误差 各
2025-08-16 16:18:11
135
原创 【2025年阿里淘天秋招(算法岗) - 8月16日 -第二题(200分)- 逃出迷宫】(题目+思路+Java&C++&Python解析+在线测试)
摘要 题目描述了一个n×n迷宫中,m个人需要从各自初始位置逃到对角线上的出口(i,i)。每个出口只能使用一次,每个人会选择最近的出口(曼哈顿距离最近)。当有多个最近出口时,人员会协调分配以最大化逃出人数。 关键思路是将问题转化为区间匹配问题:对于每个人位置(x,y),其可选择的最近出口区间是[min(x,y), max(x,y)]。使用贪心算法,按出口顺序扫描,用最小堆维护可用的区间,优先匹配右端点小的区间,从而最大化匹配数。 算法复杂度为O((n+m)log m),适用于大规模数据。代码在C++、Pyth
2025-08-16 16:17:47
8
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人