- 博客(27)
- 收藏
- 关注
原创 第八届传智杯 复赛第二场 数组重乘法 题解 C++ 数学规律&贪心
摘要: 题目要求重排数组元素,使得相邻元素乘积之和最大化。通过分析发现,最优排列方式是将最小和次小元素分别放在倒数第一和正数第一的位置,次次小和次次次小放在倒数第二和正数第二的位置,以此类推。这种交替放置最小和次小元素的策略能最大化相邻乘积之和。算法步骤包括:排序数组,按特定模式重排元素,最后计算相邻乘积之和。示例输入验证了该方法的有效性,如输入{1,2,3,4}时,最优排列为{2,4,3,1},结果2×4 + 4×3 + 3×1 = 23。代码通过双指针交替填充实现重排,时间复杂度主要由排序决定,为O(n
2026-04-21 21:03:01
69
原创 力扣 hot100 轮转数组 Java 数学&反转&双指针 三种解法 题解
本文介绍了三种解决数组右旋转问题的方法。方法一使用额外数组,通过(i+k)%n计算新位置,时间复杂度O(n),空间复杂度O(n)。方法二采用三次反转策略:先整体反转,再分别反转前k个和后n-k个元素,时间复杂度O(n),空间复杂度O(1)。方法三利用环状替换,计算数组长度和k的最大公约数确定分组数,每组内循环移动元素,时间复杂度O(n),空间复杂度O(1)。三种方法各具特色,特别是后两种实现了原地操作,满足进阶要求。
2026-03-22 21:09:04
201
原创 力扣 hot100 最小覆盖子串 哈希表 滑动窗口 Java 题解
题目要求合并所有重叠区间。给定区间数组intervals,需将重叠区间合并为一个更大的区间,最终返回不重叠的区间数组。例如输入[[1,3],[2,6]]应合并为[[1,6]]。解题思路是:1)先按区间起始点排序;2)遍历区间,若当前区间与结果数组最后一个区间重叠则合并,否则直接加入结果数组。时间复杂度O(nlogn)主要来自排序。示例代码中通过比较区间端点实现了高效的合并操作。
2026-03-18 20:41:21
263
2
原创 力扣 hot100 滑动窗口最大值 单调双端队列 java 简单题解
摘要:该题要求找出滑动窗口中的最大值。解法使用双端队列维护窗口内的递减序列,队首始终是当前窗口最大值。遍历数组时,先移除队尾小于当前元素的无效值,再添加当前索引;同时检查队首是否超出窗口范围。这样每个窗口的最大值都能在O(1)时间内获取,整体时间复杂度为O(n)。例如输入[1,3,-1,-3,5,3,6,7],k=3时输出[3,3,5,5,6,7]。该算法高效处理了大规模数据,满足题目约束条件。
2026-03-17 19:53:56
86
原创 力扣 hot100 和为K的子数组 哈希&前缀和
摘要:本文介绍了LeetCode 560题"和为K的子数组"的解法。该问题要求统计数组中连续子数组和等于k的个数。通过使用前缀和与哈希表的方法,我们可以在O(n)时间复杂度内高效解决。具体做法是:遍历数组时维护当前前缀和,利用哈希表记录各前缀和出现次数,通过检查哈希表中是否存在当前前缀和与k的差值来统计符合条件的子数组个数。该方法避免了暴力枚举,显著提高了算法效率。
2026-03-16 21:26:03
73
原创 力扣 hot100 找出字符中所有字母异位词 Java 题解 滑动窗口 哈希计数
摘要:本文解决在字符串s中查找所有p的异位词子串起始索引的问题。使用滑动窗口和哈希数组技术,维护两个长度为26的数组分别记录p和当前窗口的字符频率。通过滑动窗口遍历s,每次移动时更新窗口字符计数并比较两数组是否相等,若相等则记录起始位置。算法时间复杂度为O(n),空间复杂度O(1)。示例表明该方法能正确识别异位词位置,如输入"cbaebabacd"和"abc"时输出[0,6]。
2026-03-15 22:25:45
479
原创 LeetCode hot100 无重复字符的最长子串 滑动窗口+哈希 Java 简单思路&题解
摘要:本文提出了一种滑动窗口算法来解决寻找字符串中最长无重复字符子串的问题。算法通过维护一个字符位置哈希表,动态调整窗口边界:当遇到重复字符时,将窗口左边界移动到该字符上次出现位置的下一位。时间复杂度为O(n),空间复杂度为O(1)。示例验证表明该算法能正确计算"abcabcbb"、"bbbbb"和"pwwkew"等输入的最长子串长度分别为3、1和3。该解法高效处理了字符重复检测和窗口滑动问题。
2026-03-14 13:28:25
63
原创 力扣 热题100 hot100 三数之和 Java 简单思路题解 双指针
摘要:本文提出了一个解决三数之和问题的算法。给定整数数组nums,找出所有不重复的三元组,使其和为0。算法首先对数组排序,然后使用双指针法:固定一个元素后,用头尾指针在剩余元素中寻找满足条件的组合。通过跳过重复元素确保结果唯一性。时间复杂度为O(n²),空间复杂度为O(1)。示例验证了算法的正确性,如输入[-1,0,1,2,-1,-4]输出[[-1,-1,2],[-1,0,1]],而[0,1,1]无解。
2026-03-13 23:11:21
305
原创 力扣 hot100 盛最多水的容器 双指针 Java 简单易入手
摘要:本文提出了使用双指针法解决容器盛水问题的算法。给定表示垂线高度的数组height,通过初始化左右指针l=0和r=length-1,在循环中比较左右边界高度,移动较小值的指针,并计算当前容器的面积(r-l)*min(height[l],height[r]),保留最大值。该算法时间复杂度为O(n),空间复杂度O(1),能高效找到最大盛水面积。示例输入[1,8,6,2,5,4,8,3,7]输出49验证了算法的正确性。
2026-03-12 22:33:26
44
原创 力扣 hot100 最长连续序列 哈希 Java
摘要:本文提出了一种时间复杂度为O(n)的算法,用于求解未排序整数数组中最长连续数字序列的长度。算法核心思想是利用HashSet去重存储所有数字,然后遍历集合,仅当当前数字是序列起点时(即前驱数字不存在),才向后查找完整连续序列。通过避免重复查找,确保每个数字最多被访问两次,从而满足线性时间复杂度要求。该方法高效解决了最长连续序列问题,并通过示例验证了其正确性。
2026-03-11 18:30:53
201
原创 力扣 hot100 字母异位词分组 Java 哈希 题解
摘要:本文提出了一种将字母异位词分组的方法。算法使用哈希表存储分组,其中键为字符串的字母计数数组转换成的字符串,值为对应的异位词列表。遍历输入字符串数组时,对每个字符串统计字母出现次数,生成特征字符串作为哈希键,将相同特征的字符串归入同一列表。该方法时间复杂度为O(nk),其中n是字符串数量,k是字符串最大长度。示例代码展示了如何实现这一分组过程,最终返回哈希表中所有值组成的列表作为结果。
2026-03-10 19:54:43
239
原创 力扣 hot100 两数之和 Java
摘要:本文探讨了如何在一个整数数组中找到两个数,使它们的和等于给定的目标值。通过使用哈希表(HashMap)来存储遍历过的元素及其索引,可以在O(n)时间复杂度内高效解决问题。具体方法是:遍历数组时检查目标值与当前元素的差是否存在于哈希表中,存在则返回对应索引,否则将当前元素存入哈希表。该方法避免了暴力枚举的O(n²)复杂度,示例代码展示了这一优化解法。
2026-03-10 18:48:28
586
原创 洛谷 P2024 [NOI2001] 食物链 NOI 典型的带权并查集(或扩展域并查集)问题 简单易懂 详细代码+题解 有注释
摘要:本文描述了一个动物食物链问题,涉及A、B、C三类动物构成的环形食物链。给定N个编号动物和K条描述(同类或捕食关系),需要判断每条描述的真假并统计假话数量。通过扩展域并查集方法,将每个动物分为"自身"、"捕食对象"和"天敌"三个域来维护关系。代码实现了这一逻辑,对越界、自相矛盾等情况的描述判定为假,最终输出假话总数。该算法有效解决了食物链关系的真假判断问题。
2026-01-22 23:52:47
465
原创 洛谷 P1164 小A点菜 简单直观的二维dp做法 C++
摘要:题目要求计算在N种单价菜品中选择若干道恰好花光M元的方案数。采用动态规划方法,定义二维数组soyo[i][j]表示前i种菜品总价为j的方案数。对于每道菜品,分三种情况处理:价格高于j时继承前i-1种方案;价格低于j时累加不选和选的方案数;价格等于j时额外增加单独选择该菜品的方案。最终输出soyo[N][M]即为答案。时间复杂度O(NM),满足1秒时限要求。
2026-01-22 00:04:07
329
原创 洛谷 P1536 村村通 并查集 详细代码,有注释 简单直观的做法 c++
摘要:本文解决城镇道路连通性问题,通过并查集算法统计连通分量数量。输入包含城镇数n和道路数m,以及具体道路连接情况。核心思路是使用并查集合并已有道路连接的城镇,然后计算连通分量数,所需新增道路数即为连通分量数减1。代码实现包括并查集的查找和合并操作,最终输出需要建设的最少道路数。示例输入4个城镇2条道路时,输出需要新增1条道路。算法时间复杂度高效,适用于大规模数据(n<1000)。
2026-01-20 23:44:56
212
原创 第七届传智杯 初赛 小红的四子棋 题解 简单bfs遍历
文章摘要:本文描述了一个四子棋游戏的胜负判定问题。给定一个n×m的棋盘,玩家小红('r')和小紫('p')轮流落子,当某一方在横、竖或斜对角线方向形成4个或更多同色连珠时获胜。程序通过暴力遍历每个棋子在四个方向(横、竖、右斜、左斜)上是否存在4连珠来判断胜负。输入为棋盘状态,输出获胜者("kou"或"yukari")或平局("tobecontinued")。示例展示了小红通过斜对角四连珠获胜的情况。算法复杂度为O(nm),适用于4≤n,m≤100的
2025-12-21 14:29:02
639
原创 力扣 11.盛最多水的容器 简单的双指针算法 题解
摘要:给定n条垂线及其高度数组a,要求找出两条线使其与x轴构成的容器能容纳最多水。使用双指针法,初始化指针l和r分别指向数组首尾,计算当前容器的水量并更新最大值,每次移动高度较小的指针向中间靠拢,直到两指针相遇。时间复杂度O(n)。输入为n和数组a,输出最大水量。示例输入1输出49,输入2输出1。
2025-12-20 16:27:51
546
原创 洛谷 P1090 [NOIP 2004 提高组] 合并果子 简单贪心思想&优先队列 题解
摘要:本文介绍了一个合并果子问题的最优解法。题目要求将n堆不同数量的果子合并为一堆,每次合并消耗体力等于两堆果子重量之和,求最小体力消耗。通过贪心算法,每次合并最小的两堆果子可以保证最优解。为提高效率,使用优先队列(小顶堆)来动态维护当前果子堆,确保每次能快速获取最小堆。时间复杂度优化为O(n log n)。代码实现中,通过循环取出两个最小堆合并,将新堆重新入队,并累加体力消耗,直到只剩一堆。该方法有效解决了暴力解法的时间复杂度问题。
2025-12-19 21:50:54
729
原创 洛谷 P2440 木材加工 二分解法 经典二分
摘要:该问题要求将n根原木切割成k段等长的小木头,求最大切割长度l。采用二分查找算法,初始范围设为1到1e8。通过计算当前中间值mid能切割出的段数,调整查找范围:若段数不足则减小mid,否则增大mid。最终返回满足条件的最大l值,若无法切割则输出0。算法时间复杂度为O(n log max_length),适用于大规模数据。输入输出样例验证了算法的正确性。
2025-12-18 20:14:03
438
原创 第八届传智杯 初赛 bxg25-4 锁 题解 暴力模拟 + 直接维护区间计数 桶思想 简单直观易懂
摘要:题目描述了对n个资源进行m次上锁/解锁操作,每次操作后需统计两个区间[1,x]和[y,n]中未上锁资源的数量。输入包含多组测试数据,每组给出n,m,x,y及操作序列。解题思路是使用布尔数组标记资源状态,每次操作后动态更新受影响区间的计数器。示例展示了操作过程中区间统计的变化情况。代码实现通过维护两个计数器ansx和ansy,分别记录两个区间的可访问资源数,每次操作后即时输出结果。该方法适用于给定数据规模,但更大规模时建议采用树状数组等高效数据结构。
2025-12-17 23:54:30
786
3
原创 洛谷 P1892 [BalticOI 2003] 团伙 简单并查集 做法 题解
摘要:题目要求根据朋友和敌人关系将n个人分成最多团体。朋友的朋友是朋友,敌人的敌人也是朋友。使用并查集算法,扩展两倍节点处理敌对关系(x+n表示x的敌人)。朋友直接合并,敌人则合并(x+n,y)和(y+n,x)。最后统计根节点数量即为最大团体数。样例输入6人4个关系,输出3个团体。算法时间复杂度为O(nα(n)),适用于n≤1000的数据规模。
2025-12-16 23:05:57
673
原创 信息学奥赛 一本通 1384 珍珠
摘要:本文提出了一种基于图论的算法,用于确定N颗重量各异的珍珠中不可能处于中间重量的珍珠数量。算法通过构建有向图表示珍珠间的重量关系,分别正向和反向使用Floyd算法计算每个珍珠比多少其他珍珠重或轻。对于每颗珍珠,若其比超过(N+1)/2颗珍珠重或轻,则判定其不可能是中间重量的珍珠。该算法时间复杂度为O(N^3),适用于N为奇数的情况。实例分析显示,对于5颗珍珠和4次比较的情况,能正确识别出2颗不可能为中间重量的珍珠。
2025-12-15 15:51:01
560
原创 第八届传智杯初赛第一场 bxg25-2 小红的大小写字母 题解
我们可以用贪心的思想来进行思考,尽可能的让操作次数用完的同时让大写字母尽可能的多,当k小于等于小写字母的时候我们可以知道直接让大写字母数量+k就是答案,如果k大于的话,进行一遍小写变大写操作后,我们可以让剩下的k只对一个字母进行操作,不难发现,只要是奇数,那字母最终将会变成小写,反之,则大写,所以最后可以判断一下剩下操作数是奇偶性,是奇数就n-1输出,否则n就是答案。在一行上输入两个整数 nn 和 kk(1≦n≦105, 1≦k≦1091≦n≦105, 1≦k≦109)。
2025-12-14 17:21:44
623
原创 洛谷 P1451 求细胞数量 简单bfs解法(比较直观) C/C++ 思路&详细代码说明
本文提出了一种基于BFS(广度优先搜索)的算法来解决连通区域计数问题。算法通过遍历二维数组,每当遇到非'0'元素时,计数器加1,并使用BFS将该连通区域的所有相邻非'0'元素标记为'0'。具体实现中,定义了四个方向的位移数组来处理上下左右相邻元素,使用队列结构存储待处理坐标。主函数先读取输入数据,然后遍历整个矩阵,对每个非'0'区域启动BFS处理,最终输出连通区域的总数。该算法能有效统计矩阵中连通非'0'区域的数量,时间复杂度与矩阵大小和连通区域分布相关。
2025-12-13 17:31:27
450
原创 洛谷 P1190 [NOIP 2010 普及组] 接水问题 题解 模拟
思路:主要模拟出来题目的意思即可,手动模拟或者思考会发现其实m个水龙头中打开最久的就是接水的总时间,也就是答案。
2025-12-13 16:33:51
225
原创 AI工具实战测评:从功能到成本全解析
工具矩阵推荐(不同场景下的最优选择)技术发展预测(多模态融合、实时交互改进)附录:测试原始数据(如响应延迟表格)注:实际写作时可配合截图、代码片段(如API调用示例)和量化图表增强说服力。
2025-12-12 18:20:41
271
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅