
golang
文章平均质量分 91
不爱熬夜的Coder
coding
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【LeetCode】2. 两数相加
题目描述两个逆序存储的非空链表表示的非负整数相加,返回相同形式的和链表。主要解法是模拟加法过程:初始化虚拟头节点和进位变量,同时遍历两个链表,逐位相加并处理进位,最后检查剩余进位。示例展示了342+465=807的求解过程。推荐方法的时间复杂度为O(max(m,n)),空间复杂度相同。代码实现了链表节点定义和模拟加法解法,包含边界处理和大数相加情况。测试用例验证了不同长度链表和全零情况的正确性。该方法适用于链表表示的大数相加,避免了数字转换可能导致的溢出问题。原创 2025-08-12 13:47:15 · 838 阅读 · 0 评论 -
【LeetCode】1. 两数之和
这篇文章介绍了LeetCode经典题目"两数之和"的多种解法。题目要求在整数数组中找到两个数,使其和等于目标值,并返回它们的下标。主要提供了三种解决方案:哈希表法(最优解,时间复杂度O(n))、暴力枚举法(时间复杂度O(n²))和排序加双指针法(时间复杂度O(n log n))。文章详细说明了每种方法的实现思路、算法步骤和复杂度分析,并附有Go语言代码实现及图解说明。同时提供了多个测试用例和边界情况处理建议,全面覆盖了该问题的解题思路。原创 2025-08-12 13:33:21 · 1098 阅读 · 0 评论 -
【华为机试】648. 单词替换
题目要求将句子中的衍生词替换为最短词根。摘要如下: 这道题需要将句子中的单词替换为其最短词根。主要思路是构建字典树来高效查找词根。首先将所有词根插入字典树,然后对句子中的每个单词进行最短前缀匹配搜索。当找到匹配词根时立即替换,未找到则保留原词。字典树解法时间复杂度为O(N+M),是最优解法。此外还介绍了哈希表暴力匹配等替代方案,但效率较低。关键点在于字典树的构建和贪心搜索策略,确保找到最短词根。题目考察了字符串处理和字典树的应用能力。原创 2025-08-11 22:23:57 · 1035 阅读 · 0 评论 -
【华为机试】208. 实现 Trie (前缀树)
本文介绍了如何实现Trie(前缀树)数据结构,包含插入、搜索和前缀匹配功能。Trie树通过共享前缀高效存储字符串,每个节点代表一个字符,路径构成完整单词。核心实现包括节点结构设计(子节点映射和结束标记)、插入操作(O(m)时间)、搜索操作(检查完整单词)和前缀匹配(仅检查前缀存在)。空间复杂度为O(n*m),适用于字典类应用如自动补全。关键技巧包括共享前缀优化和状态标记,边界情况处理空字符串和重复插入。原创 2025-08-11 22:12:47 · 1642 阅读 · 0 评论 -
【华为机试】820. 单词的压缩编码
这道题考察单词压缩编码的最小长度,核心思路是找出所有不是其他单词后缀的单词。最优解法是使用反向字典树:首先将单词去重,然后反向构建字典树来检测后缀关系,最后统计所有叶子节点对应的单词长度(每个单词需要加一个'#'符号)。算法时间复杂度为O(n*m),其中n是单词数量,m是平均长度。关键优化点包括去重处理、反向字典树构建和高效的长度计算。这种方法既高效又节省空间,适用于大规模数据压缩场景。原创 2025-08-09 11:13:40 · 899 阅读 · 0 评论 -
【华为机试】452. 用最少数量的箭引爆气球
本文介绍了452题"用最少数量的箭引爆气球"的贪心解法。题目要求找到引爆所有气球所需的最少箭数,每支箭可以引爆所有与之重叠的气球。文章分析了两类贪心策略:按结束坐标排序和按起点排序,时间复杂度均为O(n log n)。核心思路是通过排序后遍历气球,当遇到不重叠的气球时增加箭数,并更新箭的位置。详细给出了算法流程、复杂度分析、优化技巧和测试用例设计,并提供了两种代码实现方案。两种解法在测试中均表现正确,能够高效解决该问题。该问题在雷达扫描、网络覆盖等实际场景中有广泛应用。原创 2025-08-09 11:06:37 · 550 阅读 · 0 评论 -
【华为机试】621. 任务调度器
任务调度问题解法总结 该问题要求在给定任务列表和冷却时间n的情况下,计算CPU完成任务的最短时间。核心解法是贪心算法,通过优先安排高频任务并利用数学公式计算最短时间。关键步骤包括: 统计任务频率 确定最大频率及相同频率任务数 计算理论时间:(maxFreq-1)*(n+1)+count 比较理论时间和任务总数,取较大值 优化空间至O(1),时间复杂度O(n) 适用于CPU调度、频率限制等场景,测试需覆盖边界情况如n=0、单一任务等情况。最优解法直接计算,比模拟调度更高效。原创 2025-08-09 10:48:35 · 723 阅读 · 0 评论 -
【华为机试】435. 无重叠区间
本文介绍了解决无重叠区间问题的贪心算法。题目要求移除最少数量的区间使剩余区间互不重叠。核心思路是优先选择结束时间早的区间:1)按结束时间排序;2)贪心选择不重叠区间;3)移除数量=总数-保留数。算法时间复杂度O(n log n),空间复杂度O(1)。提供了两种等价解法:按结束时间选择和按起点移除策略,并通过流程图和测试案例详细说明了算法过程。该算法适用于会议安排、任务调度等场景,关键在于正确的排序策略和重叠判断。原创 2025-08-09 10:46:40 · 751 阅读 · 0 评论 -
【华为机试】55. 跳跃游戏
摘要: 本文探讨了LeetCode第55题"跳跃游戏"的解法。题目给定一个非负整数数组,判断从数组起点能否跳跃到终点。文章提出三种解决方案:1)贪心算法(最优解),通过维护最远可达下标,在一次扫描中判定可达性;2)动态规划,从后往前计算可达性,时间复杂度较高;3)反向贪心,从终点回溯收缩目标位置。重点分析了贪心算法的正确性,通过循环不变式和区间扩展模型证明其有效性,并对比了不同方法的复杂度。文章还提供了Go语言实现代码、测试用例设计及常见面试问题,强调贪心算法在工程实践中的优势(O(n)原创 2025-08-08 22:13:54 · 1113 阅读 · 0 评论 -
【华为机试】63. 不同路径 II
本文探讨了机器人路径问题中的障碍物处理,采用动态规划方法求解网格中从起点到终点的有效路径数。主要内容包括: 问题描述:机器人只能在无障碍网格中向右或向下移动,计算从左上到右下的路径数。 核心解法:提出二维和一维动态规划方案,其中状态转移方程为dp[i][j] = dp[i-1][j] + dp[i][j-1],遇到障碍物时dp值为0。 实现对比:分析了二维DP(O(mn)空间)、一维优化DP(O(n)空间)和记忆化搜索三种方法,重点推荐空间优化的一维DP解法。 关键细节:处理起点/终点障碍、首行/列初始化等原创 2025-08-08 22:12:16 · 748 阅读 · 0 评论 -
【华为机试】62. 不同路径
摘要 本文探讨了机器人从m×n网格左上角到右下角的不同路径问题。关键解法包括:1)动态规划法,通过状态转移方程dp[i][j] = dp[i-1][j] + dp[i][j-1]计算路径数;2)空间优化的一维DP;3)组合数学法直接计算C(m+n-2, m-1)。文章比较了各方法的时间复杂度(最优为O(min(m,n)))和空间复杂度(最优为O(1)),并提供了多种实现代码,包括边界处理和大数溢出预防措施。典型示例显示3×7网格有28条不同路径。原创 2025-08-08 11:52:21 · 876 阅读 · 0 评论 -
【华为机试】337. 打家劫舍 III
摘要: 337. 打家劫舍 III 是一个二叉树上的动态规划问题。小偷不能同时打劫相邻的房屋(父子节点),需要计算最大收益。核心解法是树形DP,对每个节点维护两种状态:偷或不偷时的最大金额。状态转移方程为:不偷当前节点时取子节点状态的最大值之和;偷当前节点时取子节点不偷状态的和加上当前节点值。最优解的时间复杂度O(n),空间复杂度O(h)。提供多种实现方法,包括递归、记忆化和状态压缩优化。原创 2025-08-08 11:22:25 · 817 阅读 · 0 评论 -
【华为机试】332. 重新安排行程
本文介绍了332题"重新安排行程"的解法,这是一个典型的欧拉路径问题。给定一组机票,要求从JFK机场出发,使用所有机票恰好一次,返回字典序最小的行程。解决方案采用深度优先搜索结合欧拉路径算法,通过构建邻接表并对目的地排序来确保字典序最小。文章详细阐述了Hierholzer算法的实现步骤,包括图建模、排序处理、DFS遍历和回溯机制,并提供了四种不同的实现方法(递归DFS、标准欧拉路径、栈实现和邻接表计数法)。关键点在于贪心选择字典序最小的路径,当路径不通时进行回溯。算法时间复杂度为O(E原创 2025-08-07 21:26:42 · 617 阅读 · 0 评论 -
【华为机试】113. 路径总和 II
题目摘要 路径总和 II 是一道二叉树路径搜索问题,要求找出所有从根节点到叶子节点且路径和等于目标值的路径。核心算法采用深度优先搜索(DFS)结合回溯思想,通过递归遍历所有可能路径,在到达叶子节点时检查路径和是否匹配目标值。解题时需要注意叶子节点判断、路径和计算、结果收集和回溯状态维护等关键点。算法时间复杂度为O(N),空间复杂度为O(H),其中N为节点数,H为树高。实现方式包括递归回溯和BFS迭代两种主要方法,前者代码简洁,后者空间可控。原创 2025-08-07 21:09:24 · 1087 阅读 · 0 评论 -
【华为机试】685. 冗余连接 II
本文分析了LeetCode 685题"冗余连接II"的解题思路。题目要求在给定的有向图中删除一条边,使其成为合法的有根树。关键是要处理两种冗余情况:节点入度为2和存在有向环。算法通过入度统计和并查集检测来识别问题边,分为两种情况处理:当存在入度为2的节点时,需在两条候选边中选择正确的删除边;否则直接检测并删除构成环的最后一条边。时间复杂度为O(n),空间复杂度为O(n),其中n为边数。文中提供了详细的算法流程图和关键实现技巧,包括并查集优化、入度检测和环检测函数。原创 2025-08-04 22:06:45 · 884 阅读 · 0 评论 -
【华为机试】934. 最短的桥
这篇文章介绍了一个解决LeetCode 934题"最短的桥"的算法方案。该问题要求在给定的二元矩阵中,找到连接两个岛屿所需翻转的最小水域数量(0变1)。核心解法采用DFS+BFS组合策略:先用DFS标记第一个岛屿并收集其边界点,然后从这些边界点开始多源BFS搜索,直到遇到第二个岛屿。文章详细分析了算法流程、复杂度(O(n²)),并提供了优化技巧(如边界点收集、双向BFS等)和边界情况处理。该算法适用于岛屿连接、网络拓扑等场景,通过分治思想将问题分解为岛屿识别和最短路径搜索两个阶段。原创 2025-08-04 21:57:05 · 1319 阅读 · 0 评论 -
【华为机试】815. 公交路线
本文探讨了公交路线换乘问题的最优解算法。题目要求在给定公交线路和起止站点的条件下,找到最少换乘次数。通过将公交线路抽象为图结构,采用BFS算法寻找最短路径。核心思路包括:1)构建车站到路线的映射关系;2)使用BFS搜索从起点到终点的最少换乘路线;3)处理边界情况如直达或无法到达的情形。算法时间复杂度为O(N²+S),空间复杂度O(N²+S),其中N为路线数,S为车站总数。文章详细分析了不同建模策略的优缺点,并提供了优化技巧和实现示例,适用于交通规划、网络路由等实际应用场景。原创 2025-08-03 11:10:54 · 974 阅读 · 0 评论 -
【华为机试】529. 扫雷游戏
方向数组:预定义8个方向简化遍历边界检查:统一的边界检查函数状态管理:明确每种状态的转换规则递归控制:合理选择DFS或BFS优化策略:根据数据特点选择最优算法。原创 2025-08-03 10:58:48 · 831 阅读 · 0 评论 -
【华为机试】139. 单词拆分
输入: s = “catsandog”, wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]解释: 返回 true 因为 “applepenapple” 可以由 “apple” “pen” “apple” 拼接成。输入: s = “applepenapple”, wordDict = [“apple”, “pen”]输入: s = “leetcode”, wordDict = [“leet”, “code”]注意,你可以重复使用字典中的单词。原创 2025-08-03 10:43:33 · 659 阅读 · 0 评论 -
【华为机试】130. 被围绕的区域
算法摘要:该问题要求将矩阵中被'X'完全包围的区域'O'转换为'X',而边缘连接的'O'保留。核心解法包括:1)边界DFS/BFS:从边缘'O'出发标记连通区域,最后处理未标记的'O';2)并查集:通过虚拟节点连接边缘'O',区分可保留区域。时间/空间复杂度均为O(mn),其中逆向标记法避免了朴素解法的重复遍历。关键优化在于优先处理边界条件,通过临时标记减少空间消耗。适用于图像处理、连通区域分析等场景。原创 2025-08-03 10:27:42 · 1142 阅读 · 0 评论 -
【华为机试】127. 单词接龙
摘要:单词接龙问题要求计算从beginWord到endWord的最短转换序列长度,每次只能修改一个字母且中间单词必须在字典中。核心解法包括单向BFS(O(N²M)时间复杂度)和优化的双向BFS(O(NM)),后者通过从两端同时搜索减少时间复杂度。关键步骤包括:验证endWord存在性、层次遍历生成合法邻居、实时比较搜索交集。双向BFS通过维护两个搜索集合,优先扩展较小集合来提升效率,适用于大规模数据。该算法可应用于语义网络分析、路径规划等场景。原创 2025-08-01 21:56:44 · 1204 阅读 · 0 评论 -
【华为机试】34. 在排序数组中查找元素的第一个和最后一个位置
摘要:本文介绍了在排序数组中查找目标值范围的算法问题。通过双重二分查找法,分别确定目标值的左边界和右边界,确保时间复杂度为O(log n)。关键步骤包括:左边界查找(首个≥target的位置)、右边界查找(最后一个≤target的位置),以及边界有效性验证。文章对比了不同解法,分析了边界情况,并提供了详细的流程图解和优化建议。测试用例设计涵盖基础功能、边界情形和性能验证,帮助全面掌握这一经典二分查找的变种应用。原创 2025-08-01 21:38:20 · 748 阅读 · 0 评论 -
【华为机试】93. 复原 IP 地址
文章摘要: 本文介绍了复原有效IP地址的算法问题,要求将数字字符串分割为4个0-255的整数段(无前导0),用"."连接。推荐使用回溯算法:递归尝试1-3位数字分割,验证段有效性(范围、前导0),当生成4个有效段且用完字符时保存结果。时间复杂度O(3^4),空间复杂度O(n)。提供了Go代码实现,包含段验证函数和回溯主逻辑,并对比了暴力枚举和动态规划方法。通过流程图和搜索树图解算法过程,强调需处理长度、前导0、数值范围等边界条件,附有测试用例示例说明典型场景。原创 2025-07-31 10:47:36 · 1071 阅读 · 0 评论 -
【华为机试】33. 搜索旋转排序数组
摘要 该题要求在一个旋转后的有序数组中查找目标值。主要解法是二分查找,时间复杂度为O(log n)。算法核心在于判断哪一半是有序的:若左半有序且目标值在范围内,则在左半搜索;否则在右半搜索。此外还提供了找旋转点后二分的方法。代码实现中处理了边界情况,如单元素数组、目标值在边界等。测试用例验证了算法的正确性,包括正常情况和边界条件。最优解法通过二分查找高效定位目标值,适用于大规模数据。原创 2025-07-31 09:10:29 · 598 阅读 · 0 评论 -
【华为机试】43. 字符串相乘
字符串相乘问题解析 本文探讨了字符串形式大数相乘的问题,要求在不使用内置大数库的情况下实现乘法运算。文章分析了四种主要解法:模拟竖式乘法、分治算法、FFT变换法和逐位相乘法,重点介绍了模拟乘法法的实现细节。通过流程图展示了算法步骤,包括特殊值处理、双重循环计算、进位处理等关键环节。文章还比较了不同算法的时间复杂度(从O(mn)到O(nlogn))和空间复杂度,并提供了优化建议如预分配数组、批量处理进位等。最后讨论了该算法在密码学、金融计算等领域的应用场景,以及大数运算的扩展问题。测试用例应考虑基础功能、边界原创 2025-07-29 22:50:03 · 1024 阅读 · 0 评论 -
【华为机试】20. 有效的括号
这篇文章介绍了如何判断括号字符串是否有效的问题。主要内容包括: 问题描述:给定由'()[]{}'组成的字符串,判断其括号是否匹配闭合 核心解法:推荐使用栈结构,遇到左括号入栈,遇到右括号检查栈顶是否匹配 算法分析: 时间复杂度O(n),空间复杂度O(n) 包含边界处理(奇数长度直接返回false) 使用map存储括号对应关系快速匹配 其他方法对比:计数器法(仅适用简单情况)、替换法(效率低)、递归法(有栈溢出风险) 应用场景:编译器设计、表达式解析、XML/HTML标签验证等 代码实现:提供了Go语言实现,原创 2025-07-29 22:48:36 · 602 阅读 · 0 评论 -
【华为机试】5. 最长回文子串
本文介绍了寻找字符串中最长回文子串的多种解法。中心扩展法通过以每个字符为中心向两边扩展寻找回文,时间复杂度O(n²)且空间复杂度O(1)。动态规划法利用二维数组记录子串是否为回文,同样达到O(n²)时间复杂度。Manacher算法则通过预处理和对称优化实现线性O(n)时间复杂度。此外还介绍了暴力解法(O(n³))和优化的中心扩展法,并提供了详细的代码实现和复杂度分析。原创 2025-07-28 22:56:58 · 482 阅读 · 0 评论 -
【华为机试】210. 课程表 II
这篇题解介绍了解决课程表II问题的多种方法,重点分析了Kahn算法和DFS拓扑排序两种核心解法。Kahn算法通过构建邻接表和入度数组,使用队列进行BFS遍历,时间复杂度为O(V+E);DFS方法则通过状态标记检测环并按完成顺序构建结果。文章提供了详细的算法步骤描述、复杂度分析和Go语言实现代码,并包含多个测试用例验证算法正确性。当存在循环依赖时返回空数组,否则返回任意一个合法的课程学习顺序。原创 2025-07-28 22:46:18 · 755 阅读 · 0 评论 -
【华为机试】121. 买卖股票的最佳时机
这篇文章介绍了股票买卖问题的最佳时机解决方案。题目要求在给定股票价格数组中,找到某天买入并在未来某天卖出能获得的最大利润。文章提供了四种主要解法: 一次遍历法:最优解法,时间复杂度O(n),空间复杂度O(1)。通过维护最小价格变量,遍历时计算最大利润差。 暴力解法:双重循环遍历所有可能组合,时间复杂度O(n²),不推荐用于大数据量。 动态规划:使用dp数组记录每日最大利润,时间复杂度O(n),空间复杂度O(n)。 分治法:递归计算左右子数组及跨区间的利润,时间复杂度O(n log n)。 文章包含详细的算法原创 2025-07-27 10:19:52 · 488 阅读 · 0 评论 -
【华为机试】1094. 拼车
拼车问题题解摘要 本文解决了一个拼车调度问题:给定车辆容量和多个上下车行程,判断能否在不超载的情况下完成所有运输任务。提供了三种解法: 差分数组法(最优解):通过记录各位置人数变化构建差分数组,计算前缀和检查容量。时间复杂度O(n+max(to)),空间复杂度O(max(to))。 排序+模拟法:提取上下车事件排序后模拟乘车过程。时间复杂度O(n log n),空间复杂度O(n)。 优先队列法:按上车位置排序,使用优先队列管理下车顺序。时间复杂度O(n log n),空间复杂度O(n)。 其中差分数组法效率原创 2025-07-27 08:23:23 · 962 阅读 · 0 评论 -
【华为机试】1248. 统计「优美子数组」
本文介绍了统计数组中恰好包含k个奇数的连续子数组(优美子数组)的三种方法。最优解是前缀和+哈希表法,将奇数视为1、偶数视为0后,问题转化为求前缀和差值为k的子数组个数,时间复杂度O(n),空间复杂度O(n)。滑动窗口法维护包含k个奇数的窗口,数学方法通过记录奇数位置计算子数组个数。代码实现展示了各种方法的Go语言版本,并通过测试用例验证正确性。三种方法都能有效解决问题,前缀和法在效率上最为推荐。原创 2025-07-27 00:44:52 · 513 阅读 · 0 评论 -
【华为机试】437. 路径总和 III
本题要求统计二叉树中路径和等于目标值的路径数量。摘要如下: 解题思路提供三种方法: 最优解是前缀和+哈希表法(O(n)时间复杂度),通过记录路径前缀和,快速查找满足条件的路径 双重DFS法(O(n²))对每个节点作为起点进行DFS搜索 递归回溯法(O(n²))通过回溯遍历所有可能路径 代码实现给出了前缀和解法的Go语言版本,使用哈希表存储前缀和出现次数,在DFS遍历时统计满足条件的路径数。同时包含复杂度分析、测试用例和辅助函数。 关键点: 路径不要求从根节点开始或叶子节点结束 使用前缀和技巧可以高效统计路径原创 2025-07-25 09:18:44 · 847 阅读 · 0 评论 -
【华为机试】560. 和为 K 的子数组
本文介绍了统计数组中满足和为k的连续子数组个数的算法。主要包括三种解法:1)基于前缀和与哈希表的O(n)最优解,适用于所有情况;2)暴力枚举法,时间复杂度O(n²),适合小规模数据;3)滑动窗口法,仅适用于非负数数组。文中提供了详细的Go代码实现,包括核心的前缀和哈希表解法,以及暴力枚举和滑动窗口的变体。通过示例测试展示了不同方法的适用场景,如处理负数时滑动窗口不适用的情况。推荐使用前缀和+哈希表的方法,因其通用性强且效率高。原创 2025-07-25 09:15:41 · 384 阅读 · 0 评论 -
【华为机试】724. 寻找数组的中心下标
这篇文章介绍了寻找数组中心下标的问题,给出了三种解决方案。中心下标是指数组中左侧元素之和等于右侧元素之和的位置。第一种方法使用前缀和数组计算左右和,时间复杂度O(n),空间复杂度O(n)。第二种方法通过数学优化,利用总和与当前元素的关系直接判断,空间复杂度优化为O(1)。第三种是暴力解法,不推荐使用。文章还提供了Go语言实现代码和测试用例,并总结了关键点,包括数学关系、边界处理等。最后列举了相似题目,帮助读者巩固相关知识。原创 2025-07-24 22:19:06 · 982 阅读 · 0 评论 -
【华为机试】1208. 尽可能使字符串相等
本文解决字符串转换问题,要求在预算限制内找到最大可转换的子串长度。核心思路是将问题转化为滑动窗口问题,通过双指针维护当前窗口内的开销总和。当窗口开销超过预算时左指针右移,否则右指针扩展窗口并更新最大长度。最优解法时间复杂度为O(n),空间复杂度O(1)。还提供了前缀和+二分查找的替代方案(O(n log n))。测试用例验证了算法正确性,包括边界情况如maxCost=0时的处理。关键是将字符转换开销转化为数值问题,利用滑动窗口高效求解。原创 2025-07-24 22:10:48 · 1100 阅读 · 0 评论 -
【华为机试】1004. 最大连续1的个数 III
本文介绍了LeetCode 1004题"最大连续1的个数 III"的三种解法。给定一个二进制数组和一个整数k,求最多翻转k个0后能得到的最大连续1的长度。最优解法是滑动窗口法(O(n)时间复杂度,O(1)空间复杂度),通过维护一个包含最多k个0的窗口来寻找最长子数组。另外还提供了前缀和+二分查找(O(n log n))和动态规划(O(nk))两种解法。文章包含详细的问题描述、示例、解题思路、代码实现(Go语言)以及复杂度分析,并提供了测试用例验证不同解法的正确性。滑动窗口法因其高效性被推原创 2025-07-23 09:26:31 · 987 阅读 · 0 评论 -
【华为机试】209. 长度最小的子数组
本题要求找到数组中和≥target的最短连续子数组长度。采用滑动窗口算法,维护双指针left和right表示窗口边界,初始sum=0。当sum<target时扩大窗口(right右移),sum≥target时缩小窗口(left右移)并更新最小长度minLen。时间复杂度O(n),空间复杂度O(1)。若不存在满足条件的子数组则返回0。 示例说明: 输入:nums=[2,3,1,2,4,3], target=7 过程:窗口[2,3,1,2]和=8≥7→记录长度4→缩小窗口;[3,1,2,4]和=10≥7→原创 2025-07-23 08:55:26 · 504 阅读 · 0 评论 -
【华为机试】684. 冗余连接
题目要求在给定的连通无向图中找到一条冗余边,删除后使剩余部分成为一棵树。该图由n个节点的树添加一条边后形成。使用并查集算法可以高效解决该问题:初始化并查集后,顺序处理每条边,当发现某条边的两个端点已连通时,这条边即为冗余边。时间复杂度为O(nα(n)),在最坏情况下优于DFS的O(n²)解法。示例输入[[1,2],[1,3],[2,3]]输出[2,3],因为删除该边可消除环。原创 2025-07-22 09:56:28 · 1090 阅读 · 0 评论 -
【华为机试】547. 省份数量
这道题考察计算无向图中连通分量的数量。给定城市间的邻接矩阵,省份即连通分量。三种主要解法:1) 深度优先搜索(DFS):递归标记可达节点,时间复杂度O(n²),空间O(n);2) 广度优先搜索(BFS):队列层次遍历,时空复杂度同DFS;3) 并查集:高效合并集合,采用路径压缩和按秩优化,时间复杂度O(n²α(n))。根据场景选择,DFS/BFS适合静态图,并查集适合动态连通性问题。原创 2025-07-22 09:45:38 · 631 阅读 · 0 评论 -
【华为机试】503. 下一个更大元素 II
本文介绍了解决循环数组中寻找每个元素下一个更大元素的算法。通过将循环数组视为两倍长度的线性数组,利用单调栈技术高效解决该问题。主要方法包括:1)单调栈+数组复制法,时间复杂度O(n),空间复杂度O(n);2)单调栈+两遍遍历法,避免了数组复制;3)暴力枚举法,虽然直观但效率较低。文章详细分析了算法思路、实现步骤、复杂度比较,并通过数学证明和流程图展示了算法的正确性和执行过程。核心在于维护单调递减栈和处理循环索引,能有效解决循环数组中的元素查找问题。原创 2025-07-21 15:39:30 · 632 阅读 · 0 评论