自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1461)
  • 收藏
  • 关注

原创 华为校招&实习&留学生机试真题目录+算法分类+在线OJ+通过率+视频讲解

全网最新最全华为校招&实习&留学生机试真题题库

2024-10-18 10:57:57 2967 2

原创 机试真题目录

**2024年8月份,华为官方已经将华为OD机考:OD统一考试(D卷)切换到 OD统一考试(E卷)** 。从参加过华为OD笔试的朋友来看,**E卷的新题非常少,大部分是A,B,C,D卷的合并题库。** 另一方面据考生反应需要双机位,也就是在牛客小程序中一直点确认,最后一步需要调试并开启您的摄像头。

2023-11-30 14:28:44 55596 24

原创 【2025年阿里云秋招(算法岗)-8月17日-第三题(300分)- 最小区间长度】(题目+思路+Java&C++&Python解析+在线测试)

本文介绍了战斗狂Tk参加爬榜竞赛的问题,他需要通过击败对手来最大化击败数。关键思路是将每层选手按战斗力升序排序后拼接成序列,并计算该序列的严格递增子序列(LIS)长度。具体步骤包括:排序每层选手、按层拼接序列、使用牌堆法计算LIS长度。算法的时间复杂度为O(M log M),其中M是选手总数。最终通过维护tails数组并用二分查找确定插入位置,得到最大击败数。代码提供了C++、Python和Java的实现示例。

2025-08-17 16:14:45

原创 【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

原创 【2025年阿里云秋招(算法岗)-8月17日-第一题(100分)- 最小区间长度】(题目+思路+Java&C++&Python解析+在线测试)

给定一个非严格递增数组,允许对任意区间执行一次操作,使区间内元素加上特定增量。目标是找到使数组出现相邻元素差值超过d的最小区间操作长度。若无需操作或无法实现,则分别输出0或-1。 方法思路: 检查原始数组:首先检查数组是否已有相邻元素差值超过d,若有则直接返回0。 单元素操作:检查是否存在单元素操作(区间长度为1)能使某相邻差值超过d。若存在,返回1。 区间操作:若无上述情况,计算需要的最小区间长度,使得操作后至少一对相邻元素差值超过d。通过遍历每个可能的相邻对,计算所需的最小操作区间长度。 解决代码: i

2025-08-17 16:12:46

原创 【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

原创 【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 13

原创 【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

原创 【2025年字节跳动秋招- 8月17日 -第一题(100分)- 小苯的GCD疑惑】(题目+思路+Java&C++&Python解析+在线测试)

摘要 题目要求通过最多一次将数组任意区间元素乘以k的操作,最大化数组的最大公约数(gcd)。分析表明,无论选择哪个区间进行操作,最终数组的gcd最大值为k乘以原数组的gcd。因此,只需计算原数组的gcd并乘以k即可得到结果。该解法时间复杂度为O(n),适用于大规模数据。示例输入输出验证了该结论的正确性。

2025-08-17 13:11:37 12

原创 【2025年拼多多秋招-8月17日-第四题(400分)- 多多种树】(题目+思路+Java&C++&Python解析+在线测试)

该问题要求通过在已有树木之间插入最少的新树,使得没有任何连续区间的美观值之和等于给定数字M。通过分析发现,当某段区间的前缀和之差等于M时,必须在该区间后插入一棵新树来切断这种关系。具体解法是维护一个哈希集合记录当前段的前缀和,当某个新前缀和与之前某个前缀和的差为M时,立即切段并在该位置插入一棵新树,重新开始统计新段的前缀和。这种方法确保每段内部和跨段区间都不会出现和为M的情况,且插入的树数量最少。算法的时间复杂度为O(N),适用于大规模数据。

2025-08-17 13:11:26 3

原创 【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 2

原创 【2025年拼多多秋招-8月17日-第二题(200分)- 多多的果园】(题目+思路+Java&C++&Python解析+在线测试)

摘要 题目描述了一个果园管理者在收获季面临的选择问题:每天有不同食量的小动物到来,接纳它们需要消耗总果实量(每日食量乘以剩余天数)。目标是在总果实量X的限制下,最大化接纳的小动物数量。 解题思路是将问题转化为0-1背包问题,其中每个物品的重量为小动物的总消耗量,价值均为1。通过贪心策略,优先选择总消耗量小的动物。具体步骤包括:计算每只动物的总消耗,过滤掉无法满足的,排序后依次累加直到容量耗尽。 算法复杂度为O(n log n),适用于大规模数据。代码实现展示了如何高效处理输入、计算权重、排序和累加计数,最终

2025-08-17 13:11:10 2

原创 【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 4

原创 【2025年京东秋招- 8月16日 -第二题(200分)- 跳水评分】(题目+思路+Java&C++&Python解析+在线测试)

摘要 题目要求从n位裁判的连续m个打分中,去掉最高和最低分后求平均值,找出使平均值最大的起始位置。通过滑动窗口算法,维护窗口和、单调队列(分别记录当前窗口的最小值和最大值),在O(n)时间内高效解决问题。具体实现时,窗口每移动一步就更新和值与极值队列,比较当前窗口的(sum - min - max)值并记录最优解。代码提供了Python、Java和C++三种语言的实现,均采用相同思路,确保在最优复杂度内完成计算。

2025-08-17 11:19:01

原创 【2025年京东秋招- 8月16日 -第一题(100分)- 减小逆序对】(题目+思路+Java&C++&Python解析+在线测试)

本文研究了如何通过至多一次区间加1操作来最大化减少序列的逆序对数量。关键结论是:操作收益等于被消去的逆序对数减去新增的逆序对数,其中被消去的对数来自区间左侧较大值与区间内较小值的配对,而新增对数来自区间内元素与右侧相同值的配对。通过从右到左扫描数组,动态维护"未处理"和"已处理"元素的统计值,可以线性时间复杂度计算最优解。算法使用两个数组rest和put分别记录未处理元素和已处理元素的值分布,在扫描过程中实时更新当前收益并记录最大值。该方法的时间复杂度为O(n),空间

2025-08-17 11:18:52 2

原创 【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 1

原创 【2025年美团秋招(算法岗)- 8月16日-第三题(300分)- 奇幻王国魔法石】(题目+思路+Java&C++&Python解析+在线测试)

本文研究了在具有魔法石影响的奇幻王国中,寻找从城市1到城市n的最短路径问题。通过分层图模型(按使用好魔法石次数分层),结合Dijkstra算法处理每层内的非负权边和跨层的负权边转移。算法依次处理0到k次好石使用情况,每层内通过Dijkstra计算最短路径,并利用跨层转移考虑新增一次好石使用的最优解。最终取各层到达目标城市的最小值作为答案,若无法到达则输出"NO"。该解法时间复杂度为O(k*(m+nlogn)),有效解决了带次数限制的负权边最短路问题。

2025-08-17 11:18:29 2

原创 【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 3

原创 【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 3

原创 【2025年虾皮秋招-8月16日-第一题(100分)- 二分图】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 本文介绍了如何判断一个无向图是否为二分图。二分图的定义是能够将其节点划分为两个独立子集,使得每条边的两个顶点属于不同子集。核心算法采用BFS/DFS遍历图,通过染色法检测是否存在冲突(即相邻节点颜色相同)。若整个图遍历过程中未发现冲突,则为二分图。文章提供了Python、Java和C++三种语言的实现代码,时间复杂度为O(n+m),空间复杂度为O(n+m)。该方法适用于处理可能不连通的图,并确保正确识别奇环的存在。

2025-08-16 20:29:26 137

原创 【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 1

原创 【2025年虾皮秋招-8月16日-第二题(200分)- 反转字符串】(题目+思路+Java&C++&Python解析+在线测试)

本文介绍了一种算法,用于反转字符串中的小写字母,同时保持其他字符位置和单词顺序不变。算法核心是使用双指针技术:对每个单词单独处理,左指针从左向右、右指针从右向左扫描,遇到小写字母则交换位置,非小写字母则跳过。该方法时间复杂度为O(n),空间复杂度为O(1),适用于包含大小写字母、数字和空格的字符串。文章提供了Python、Java和C++三种语言的实现代码,均遵循相同的双指针处理逻辑,确保单词间空格保留不变。

2025-08-16 20:28:45 2

原创 【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 129

原创 【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 5

原创 【2025年阿里淘天秋招(算法岗) - 8月16日 -第一题(100分)- 大,大大,大大大】(题目+思路+Java&C++&Python解析+在线测试)

题目摘要 给定一个长度为n的整数数组,允许进行任意次操作:选择两个不同下标i和j,将a[i]增加a[j]并置a[j]为0。目标是通过操作使数组所有前缀最大值之和最大。前缀最大值之和定义为:对每个i(1≤i≤n),计算前i个元素的最大值并求和。 解题思路 操作本质:每次操作相当于将某个元素的值"转移"到另一个元素上,被转移的元素变为0。 最优策略:应将所有正数尽可能合并到靠前的位置,因为这些位置对前缀最大值的影响更大。 关键观察: 若存在正数,应选择某个正数作为"接收点&quot

2025-08-16 16:17:14 8

原创 【2025年科大讯飞秋招- 8月16日 -第三题(300分)- 网格元素反置】(题目+思路+Java&C++&Python解析+在线测试)

摘要 题目要求处理一个初始全0的n×m网格,经过k次行/列翻转操作后,将网格按行拼接成二进制数并输出其十进制值模1e9+7的结果。关键在于分析翻转操作对最终二进制数的影响,通过独立记录行和列的翻转奇偶性,将问题转化为行列异或模型。计算翻转后的二进制值时,利用等比数列求和公式高效处理大规模数据,注意处理2^m=1的特殊情况。最终通过组合未翻转行和翻转行的贡献得到答案。时间复杂度主要取决于k次操作的处理,核心算法高效可行。

2025-08-16 15:31:58 394

原创 【2025年科大讯飞秋招- 8月16日 -第二题(200分)- 数组的区间长度】(题目+思路+Java&C++&Python解析+在线测试)

题目要求通过一次区间操作使非递减数组出现逆序对,求最小区间长度或判定不可行。关键在于发现只需检查是否存在相邻元素差小于操作系数m,若存在则取长度为1的区间即可制造逆序,否则无法实现。该解法时间复杂度为O(n),通过线性扫描数组即可得到答案。

2025-08-16 15:31:02 7

原创 【2025年科大讯飞秋招- 8月16日 -第一题(100分)- 大小写字母字符串】(题目+思路+Java&C++&Python解析+在线测试)

摘要:题目要求对给定字符串进行恰好k次大小写切换操作,使得最终大写字母数量最大化。初始大写字母数为U,小写为L。若k≤L,结果直接为U+k;若k>L,先将所有小写字母转为大写,剩余操作次数r=k-L的奇偶性决定结果:偶数为n(全大写),奇数为n-1(需牺牲一个字母)。时间复杂度O(n)。

2025-08-16 15:29:54 6

原创 【2025年OPPO秋招-8月16日-第三题(300分)- 魔法项链上的宝石】(题目+思路+Java&C++&Python解析+在线测试)

题目要求在一个环形宝石链上选择若干对互补的字母宝石(如a-z、b-y等),使得这些配对在环上不相交,且总得分(配对字母位置值的乘积之和)最大。通过将环形问题转化为线性处理,使用区间动态规划(DP)求解。具体步骤包括: 预处理每个字母的位置值(不区分大小写)和大小写信息; 定义DP数组dp[l][r]表示区间[l,r]内的最大得分; 按区间长度从小到大递推,对于每个区间,考虑是否配对右端点与其他点,并确保不交叉; 最终答案为所有可能线性窗口的最大值。 该方法的时间复杂度为O(n³),空间复杂度为O(n²),适

2025-08-16 15:28:34 209

原创 【2025年OPPO秋招-8月16日-第二题(200分)- 数组长度排列】(题目+思路+Java&C++&Python解析+在线测试)

摘要 本文研究了一个数组操作问题:给定一个整数数组,每次操作可以将某个元素对半取整。目标是判断是否存在一系列操作,使得最终数组成为1到n的排列。通过贪心算法,将数组降序排序后,依次将每个元素缩减到可用的1到n范围内的最小未被占用值。若所有元素都能找到对应位置,则输出"YES",否则输出"NO"。算法时间复杂度为O(n log n),适用于大规模数据。

2025-08-16 15:27:41 8

原创 【2025年OPPO秋招-8月16日-第一题(100分)- 数组重排计划】(题目+思路+Java&C++&Python解析+在线测试)

摘要 题目要求通过重新排列数组,使得计算出的权值最大或最小。权值定义为数组相邻元素之和的总和。通过数学推导发现,权值可以表示为 2倍数组总和减去首尾元素之和。因此,最大权值由最小的两个元素作为首尾得到,最小权值由最大的两个元素作为首尾得到。解决方案只需遍历数组一次,计算总和并记录最小两数和最大两数,时间复杂度为O(n),空间复杂度为O(1)。

2025-08-16 15:25:42 12

原创 【2025年饿了么秋招(开发岗)-8月15日-第三题(300分)- 桥梁建造工程】(题目+思路+Java&C++&Python解析+在线测试)

这道题目要求我们在保证所有城市连通的前提下,选择建桥计划以获得最大总利润。通过分析,我们得出关键结论:最优解必然包含所有能带来正利润的桥梁。因此,解题步骤如下: 选取所有正利润桥梁:将这些桥梁加入并查集,并累计利润。 处理非正利润桥梁:将剩余城市连通时,优先选择亏损最小的桥梁(即利润较大的非正边),按利润从大到小排序后使用Kruskal算法连接剩余连通分量。 这种方法确保在满足连通性条件下最大化总利润,时间复杂度主要由排序操作决定,适用于大规模数据。 示例解析:对于样例输入,最优解包含所有正利润桥梁(总利润

2025-08-15 21:05:16 8

原创 【2025年饿了么秋招(开发岗)-8月15日-第二题(200分)-木棍拼正多边形】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 该问题要求计算用给定木棍拼出正多边形的方案数。正多边形需满足所有边长度相等,边数k≥3。解题思路是统计各长度出现的频率,并利用组合数计算满足条件的方案数。具体步骤包括:1) 统计各长度出现次数;2) 预处理阶乘和逆元以快速计算组合数;3) 遍历每个可能的边数k,累加满足频率≥k的组合数。最终输出每个k对应的方案数取模结果。时间复杂度为O(n²),空间复杂度为O(n)。提供了Python、Java和C++三种实现代码。

2025-08-15 21:05:07 9

原创 【2025年饿了么秋招(开发岗)-8月15日-第一题(100分)- 构造异或数组】(题目+思路+Java&C++&Python解析+在线测试)

题目要求构造一个长度为n的正整数数组,使得数组所有元素的异或值等于它们的或值。关键在于确保每一位二进制位上1的个数为奇数或零。对于奇数n,构造全1数组;对于偶数n,构造n-1个1和1个2的数组。这样能保证每一位1的个数都为奇数或零,满足条件。时间复杂度为O(∑n),适用于大规模数据。

2025-08-15 21:05:00 10

原创 【2025年小红书秋招-8月13日-第三题(300分)- 超级重排】(题目+思路+Java&C++&Python解析+在线测试)

题目摘要:给定一个非严格递增的数组,部分位置丢失(标记为0),要求统计将0替换为正整数后保持非严格递增的方案数。保证首尾元素非零,结果对10^9+7取模。 关键点: 检查非零位置是否已满足非降序 计算相邻非零位置间零段的方案数,使用组合数学公式C(d+k,k),其中d为值差,k为零个数 预处理阶乘和逆元以高效计算组合数 时间复杂度O(n),适用于大输入规模

2025-08-14 09:55:56 14

原创 【2025年小红书秋招-8月13日-第二题(200分)- 行为权重】(题目+思路+Java&C++&Python解析+在线测试)

题目摘要 给定一个长度为n的数值数组a,对于每个m(1≤m≤n),我们可以在原数组中删除最多n-m个元素(每次删除需要支付固定代价k),然后计算新数组前m项的和。总代价为删除次数*k加上前m项之和。对于每个m,需要独立计算最小代价。 输入输出 输入:多组测试数据,每组包含n,k和数组a 输出:对每个m=1..n输出最小代价 解题思路 核心观察:对于每个m,最优解是保留原数组前p(p≥m)个元素中的最小m个,并删除p-m个元素 算法步骤: 枚举前缀长度p(m≤p≤n) 对每个p,将前p个元素排序并计算前缀和

2025-08-14 09:51:34 13

原创 【2025年小红书秋招-8月13日-第一题(100分)- 超级重排】(题目+思路+Java&C++&Python解析+在线测试)

本文提出了一种最大化数组元素和的"超级重排"方法。给定一个正整数数组,首先收集所有数字的每一位组成数字池,然后根据原数字的位数重新分配数字池中的数字,使得新数字的和最大。关键思路是将所有数字位按从大到小排序,并与权重位(10^k)从大到小一一配对。通过C++、Python和Java三种实现,展示了如何高效地收集数字位、生成权重位并进行最优配对,最终计算最大和。算法的时间复杂度为O(nlogn),适用于大规模数据。

2025-08-14 09:50:22 13

原创 【2025年米哈游秋招-8月10日-第三题(300分)- 区间强势顶点】(题目+思路+Java&C++&Python解析+在线测试)

摘要:题目要求处理多个区间查询,每个查询需要找出区间内能到达所有其他顶点的"强势顶点"。关键是将问题转化为寻找区间内满足a[i]-b[i]最大的顶点个数。通过预处理构建线段树,维护每个区间的最大值及其出现次数,可在O(log n)时间内完成每个查询。算法总复杂度为O(n + q log n)。

2025-08-11 01:52:37 93

原创 【2025年米哈游秋招-8月10日-第二题(200分)- 舞台】(题目+思路+Java&C++&Python解析+在线测试)

本文提出了一种高效解决环形舞台最小建造成本问题的算法。该问题需要在环形排列的n个位置中选择连续的m个位置,计算正序和逆序建造方式中的最小成本。 算法核心采用滑动窗口技术结合前缀和优化,关键创新点在于: 将环形数组扩展为线性数组处理 推导出滑动窗口时正序成本的O(1)更新公式: forward_cost = forward_cost - sum + m*a[i+m] 利用逆序成本与正序成本的关系:(m+1)*sum - forward_cost 该算法的时间复杂度为O(n),空间复杂度为O(n),能够高效处理

2025-08-11 01:52:00 17

原创 【2025年米哈游秋招-8月10日-第一题(100分)- 排列最小化】(题目+思路+Java&C++&Python解析+在线测试)

本文介绍了一种贪心算法,用于在有限交换次数下将排列转换为字典序最小的排列。通过建立值到位置的映射表,算法从左到右逐个位置处理,确保每个位置尽可能放置最小的可能值。每次交换后同步更新映射表以保持高效查找,直到交换次数用完或达到最优排列。该算法时间复杂度为O(n),适用于大规模数据。代码实现包括Python、Java和C++版本,均采用相同的核心逻辑。

2025-08-11 01:50:57 14

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除