- 博客(96)
- 收藏
- 关注
原创 LeetCode 2761 和等于目标值的质数对
埃拉托斯特尼筛法是解决质数问题的经典算法,通过预处理质数列表可以大大提升后续查询效率。在本题中,我们利用筛法快速得到质数集合,再通过遍历验证可能的质数对,最终在 O (n) 时间内完成所有验证操作。这种方法在处理较大 n 值时依然高效,是解决类似问题的推荐方案。提前剪枝:处理小 n 值的特殊情况奇偶分离:减少 50% 的循环次数倍数跳跃:更高效地标记非质数。
2025-04-02 10:09:32
602
原创 LeetCode 419 棋盘上的战舰
通过巧妙利用相邻单元格的状态,我们可以在一次遍历中高效统计舰队数量。这种方法不仅避免了重复计算,还确保了时间和空间复杂度的最优。关键技巧:在二维数组问题中,利用相邻元素的状态减少重复判断,是优化时间复杂度的常用手段。
2025-04-01 14:11:50
286
原创 LeetCode 211
字典树是解决字符串匹配问题的高效工具,结合递归处理通配符,可以优雅地实现本题要求。这种方法在需要频繁进行插入和搜索操作的场景下表现优异,例如拼写检查、自动补全等。
2025-03-31 18:32:53
412
原创 LeetCode 1492 n的第K个因子
暴力法:简单直观,适合小规模数据。优化法:利用因子成对特性,大幅减少遍历次数,适合大规模数据。关键优化点:分治小因子和大因子,避免重复计算。
2025-03-28 12:45:20
450
原创 LeetCode 1486 数组异或操作
异或操作的本质是 “差异累积”,结合数学规律(如周期性、前缀和)可突破线性时间限制。本题的优化思路适用于所有 “连续整数异或” 问题(如 LeetCode 260. 只出现一次的数字 III)。达 1e9 时,暴力解法不可行,优化方法仍 O (1) 时间。为偶数),可类似分解为基数异或和末位处理。求所有元素的按位异或(XOR)结果。直接生成数组并逐个异或,直观易懂。[异或周期性示意图](异或一次(否则抵消)。
2025-03-27 11:12:30
665
原创 LeetCode 524 通过删除字母匹配到字典里最长单词
时空平衡:线性时间复杂度,常数空间,适合大规模数据。逻辑简洁:双指针法直观易懂,避免复杂数据结构。这道题教会我们如何用双指针的 “舞蹈” 优雅地检查子序列,同时用优先级规则筛选最优解。就像整理书架:先按高度(长度)排序,再按书名(字母序)排列,最终找到最合适的 “那本书”。下次遇到字符串匹配问题时,记住双指针的魔力:让字符在遍历中自然匹配,让优先级在比较中浮出水面。代码的简洁,正是算法之美的最佳注脚!📜✨。
2025-03-25 10:12:38
914
原创 LeetCode 942 增减字符串匹配
low双指针 + 贪心策略:通过维护最小值和最大值指针,每次根据字符选择极值,确保每一步选择的最优性,最终线性时间内构造合法排列。
2025-03-24 12:43:05
956
原创 LeetCode 3038 相同分数的最大操作数目I
忽略非相邻元素组合:操作不要求元素连续,只需两两配对。固定前两数之和:未枚举所有可能的和,导致遗漏最优解。未处理元素重复使用:双指针法确保每对元素仅使用一次(通过左右指针移动)。枚举所有可能的操作分数(两数之和)。排序 + 双指针法高效计算每个分数对应的最大操作次数。取所有可能分数中的最大值。该方法通过暴力枚举(合理范围)和高效匹配(双指针)的结合,确保了正确性和一定的效率。在实际编程中,需注意边界条件(如数组长度 < 2)和元素重复使用的问题。适用场景。
2025-03-23 13:11:10
650
原创 LeetCode LCR 033 字母异位词分组
场景推荐方法理由通用场景(教学 / 竞赛)排序分组法逻辑清晰,易于调试长字符串 / 性能敏感频率统计法避免排序开销多语言协作排序分组法统一逻辑,跨语言一致性变位词本质:字符相同 → 排序或频率统计生成唯一键。哈希表核心作用:O (1) 时间复杂度的分组查找。复杂度平衡:排序的 O (m log m) vs 频率统计的 O (m)(根据场景选择)。
2025-03-22 11:31:38
573
原创 LeetCode 2517礼盒的最大甜蜜度
排序:为贪心选择提供有序基础。二分查找:在可能的甜蜜度范围内高效搜索最大值。贪心验证:用 “每次选最近满足条件的元素” 策略,快速判断可行性。这种方法的时间复杂度低(主导为排序的 O (n log n)),空间复杂度友好,是解决 “最大化最小值” 问题的标准解法。通过本题,读者可以掌握二分查找与贪心算法的结合技巧,举一反三解决类似问题。贪心函数中使用增强 for 循环()提升可读性。提前终止循环()减少不必要的遍历。如果有任何疑问或想进一步探讨,欢迎在评论区留言!😊。
2025-03-21 14:33:43
946
原创 LeetCode LCR177 撞色搭配
遇到 “找不同” 的问题时,不妨想起袜子的舞会:让异或的魔法消除冗余,让位的光芒照亮隐藏的答案!🧦✨。
2025-03-20 10:49:19
1307
原创 LeetCode 326 3的幂
循环迭代法:通用、易理解,适合教学和通用场景。数学性质法:Java 特化优化,极致性能,适合已知整数范围的场景。选择建议:根据语言特性和场景选择。若需跨语言或通用逻辑,选循环法;若追求极致性能(Java),选数学法。
2025-03-18 12:51:34
957
原创 LeetCode1614 括号的最大嵌套深度
核心思想:用计数器跟踪深度,左括号时更新最大值。代码模板:遍历字符 + 双变量记录当前 / 最大深度。优化点:实时更新最大值,避免二次遍历。通过这种方法,我们可以在线性时间内解决问题,既高效又易于理解。无论是面试还是实际开发,这种 “轻量级” 的计数器思路都值得掌握!
2025-03-17 14:28:14
297
原创 LeetCode2593 标记所有元素后数组的分数
本题的核心是贪心选择最小元素,结合优先队列高效获取最小未标记元素,通过标记数组避免重复处理。这种贪心策略确保每次选择最优解,最终得到全局最优分数。理解标记逻辑(自己 + 相邻)和优先队列的排序规则是解题关键。适用场景:需要多次选择极值(最小 / 最大)并处理关联元素的问题,优先队列是常用工具。标记数组的使用在类似 “跳跃游戏”、“区间覆盖” 问题中也常见,值得举一反三。
2025-03-16 11:06:39
864
原创 LeetCode 3280 将日期转换为二进制表示
核心考点:日期解析、二进制转换、字符串操作优化。逆向思维:通过预分配数组和逆向填充,避免字符串拼接的性能损耗,这是处理固定格式字符串的常用技巧。扩展性:若需处理大量日期(如日志批量转换),解法二更具优势;日常开发中解法一的简洁性更值得优先选择。代码启示:编程中往往有多种解法,选择时需权衡可读性性能和场景需求,这正是算法优化的魅力所在。
2025-03-15 11:54:36
448
原创 LeetCode 1447 最简分数
核心逻辑:双重循环遍历分母和分子,通过 GCD 判断互质。优化方向:欧拉函数预处理适合大规模数据,减少重复 GCD 计算。易错点:边界条件(n=1 时返回空)、分子分母范围的严格控制。适用场景当 n≤1000 时,暴力法足够高效(LeetCode 实测 n=1000 时耗时约 2ms)。当 n>10^4 时,建议使用欧拉函数优化。欧几里得算法的实际应用数论中互质的判断方法算法优化的常见思路(空间换时间)
2025-03-11 21:57:13
421
原创 LeetCode 2380 二进制字符串重新安排顺序需要的时间
暴力模拟法:直观易懂,适合小规模输入。数学规律法:高效优化,适合大规模输入。实际开发中需根据场景选择合适方法。掌握字符串处理技巧和数学规律推导能力,对解决类似问题至关重要。如果您有任何疑问或建议,欢迎在评论区交流!🚀。
2025-03-10 19:47:12
719
原创 LeetCode 2379得到K个黑块的最少涂色次数
滑动窗口算法是解决连续子数组 / 子字符串问题的高效方法。通过动态维护窗口的左右边界,避免了重复计算,时间复杂度降低到 O (n)。在本题中,我们利用滑动窗口快速找到最优解,显著提升了算法效率。掌握这一技巧对于应对面试和实际开发中的类似问题非常关键。如果您有任何疑问或建议,欢迎在评论区交流!🚀。
2025-03-10 16:40:42
967
原创 LeetCode 1876长度为三且各字符不同的子字符串
需要找出其中所有长度为 3 的 “好子字符串”,也就是不含有任何重复字符的连续子字符串,并统计其数量。需要注意的是,即便相同的好子字符串多次出现,每次都要计入结果。
2025-03-09 12:41:38
803
原创 LeetCode1871 跳跃游戏VII
初始时,你位于下标 0 处(保证该位置为 '0')。你需要判断是否能到达字符串的最后一个位置(下标为。:若题目允许跳跃到 '1' 位置,但需额外条件(如跳跃次数限制),如何调整算法?给定一个下标从 0 开始的二进制字符串。
2025-03-09 12:12:52
497
原创 LeetCode1137 第N个泰波那契数
泰波那契序列TnT0 = 0T1 = 1T2 = 1,并且在n >= 0的条件下,。简单来说,从第三项之后的每一项,都是它前面三项的和。这与我们熟悉的斐波那契数列有些相似,但又多了一项的参与,也因此带来了一些不同的挑战。通过对泰波那契数列求解问题的探讨,我们看到了不同算法思路的魅力与差异。递归法虽然直观,但效率低下;记忆化搜索法通过优化递归,避免了重复计算,提升了效率;而迭代法则以其简洁高效的特点,成为解决此类问题的首选方法。
2025-03-08 19:55:35
928
原创 LeetCode529 扫雷游戏
通过对扫雷游戏问题的分析和解决,我们深入理解了 BFS 算法在处理这类需要递归探索的问题中的应用。在实际编程中,遇到类似问题时,我们可以借鉴这种思路,通过合理的数据结构和算法来高效地解决问题。同时,对问题的边界条件和细节处理也至关重要,这将直接影响代码的正确性和鲁棒性。希望这篇博客能帮助你更好地掌握扫雷游戏问题的解法,以及 BFS 算法的应用技巧。
2025-03-07 17:18:47
1179
原创 LeetCode LCR 182 动态口令
通过巧妙运用 Java 语言提供的字符串操作方法,我们能够轻松且高效地实现动态口令的更新功能。这种实现方式不仅逻辑清晰、简单易懂,而且具备良好的扩展性,能够根据实际应用场景的多样化需求进行灵活调整和优化。希望本文所介绍的内容,能够帮助读者深入理解动态口令技术的基本原理以及在 Java 环境下的具体实现过程,为大家在信息安全相关领域的学习和实践提供有益的参考和借鉴。
2025-03-05 13:55:23
663
原创 LeetCode3226 使两个整数相等的位更改次数
通过巧妙地运用二进制运算符,我们可以高效地解决这个问题。按位或运算符用于判断可行性,按位异或运算符用于找出不同的位,按位与运算符和右移运算符用于统计1的数量。这个问题不仅考验了我们对二进制操作的理解,也让我们看到了二进制运算符在解决实际问题中的强大作用。希望这篇博客能帮助你更好地理解这个问题以及相关的二进制操作。如果你有任何疑问或建议,欢迎在评论区留言。
2025-03-03 12:46:15
659
原创 LeetCode 2656 K个元素的最大和
这道题看似复杂,但通过贪心策略和数学推导,我们可以将问题简化为一个简单的等差数列求和问题。在解决算法问题时,我们不仅要关注编程实现,还要善于运用数学知识,这样往往能事半功倍。希望通过这篇博客,你对这类问题有了更深入的理解。
2025-02-28 13:06:09
276
原创 LeetCode 2558 从数量最多的堆里取走礼物
通过上述的解题思路和代码实现,我们可以有效地解决在k秒后计算剩余礼物数量的问题。该算法的核心在于模拟每一秒的操作过程,不断更新礼物数量,最终得到剩余礼物的总数。这种方法简单直接,易于理解和实现。
2025-02-27 11:19:43
329
原创 LeetCode 589
首先,我们需要定义 N 叉树的节点结构。int val;} Node;这里,val表示节点的值,表示该节点的子节点数量,children是一个指向子节点指针数组的指针。通过递归和迭代两种方法,我们成功实现了 N 叉树的前序遍历。递归方法代码简洁直观,适合理解和实现;迭代方法则避免了递归调用栈的开销,在某些场景下可能更具优势。在实际应用中,可以根据具体需求选择合适的方法。希望本文能帮助你更好地理解 N 叉树的前序遍历以及 C 语言的实现。
2025-02-26 15:13:44
857
原创 LeetCode3345 最小可整除数位乘积I
通过上述代码和分析,我们成功解决了寻找大于等于n且各数位之积能被t整除的最小整数的问题。此问题让我们深入理解了如何对整数的各个数位进行操作,以及如何运用循环和条件判断来解决实际问题。在实际编程中,我们可以根据具体情况对代码进行优化,以提高效率。希望本文能帮助你更好地理解和解决类似的算法问题。如果你有任何疑问或其他想法,欢迎在评论区留言讨论。
2025-02-25 12:58:26
574
原创 LeetCode 2506 统计相似字符串对的数目
为了判断两个字符串是否由相同的字符组成,我们可以使用一个长度为 26 的数组来记录每个字符是否在字符串中出现过。题目中定义了一种字符串相似的规则:如果两个字符串由相同的字符组成,那么就认为这两个字符串是相似的。例如,"abca" 和 "cba" 是相似的,因为它们都由字符 'a'、'b'、'c' 组成;第二步,遍历字符串数组中的所有字符串对,统计相似字符串对的数量。这是因为我们需要使用两层嵌套循环遍历所有的字符串对,对于每一对字符串,还需要遍历它们的每个字符来判断是否相似。是字符串数组的长度,
2025-02-24 13:02:49
584
原创 LeetCode541 反转字符串2
通过分组处理和反转操作,我们可以高效地解决这个字符串反转问题。这种方法的时间复杂度较低,并且只需要常数级的额外空间。在实际应用中,我们可以根据具体需求对代码进行优化和扩展。
2025-02-15 22:17:55
540
原创 LeetCode1240 铺瓷砖
通过回溯法,我们可以解决用整数边正方形贴满长方形的最小数量问题。虽然这种方法在最坏情况下的时间复杂度较高,但对于较小的输入规模是可行的。在实际应用中,我们可以根据具体情况对算法进行优化,以提高效率。希望这篇博客能帮助你理解如何使用 C 语言解决这个有趣的问题!如果你有任何疑问或建议,欢迎留言讨论。
2025-02-11 19:28:36
886
原创 LeetCode805 数组的均值切割
通过数学推导和动态规划,我们可以高效地解决这个问题。关键在于将问题转化为寻找一个子集,使得其和满足特定条件。动态规划是一种强大的工具,能够帮助我们解决类似的子集和问题。如果你对动态规划或类似的算法问题感兴趣,可以尝试解决更多相关题目,例如子集和问题或背包问题。
2025-02-10 15:28:34
660
原创 LeetCode781 森林中的兔子
引入标准输入输出库,用于后续的printf函数输出结果。:引入标准库,这里虽然代码中未直接使用库中的函数,但在更复杂的应用场景下可能会用到,提前引入作为储备。:定义一个宏MAX_ANSWER,表示兔子回答的最大可能值。这有助于后续代码中数组的创建和遍历范围的确定。
2025-02-09 20:27:24
914
原创 LeetCode671 二叉树中第二小的节点
通过利用这棵特殊二叉树的性质,我们采用深度优先搜索的方法,成功地找出了树中第二小的值。这种方法简洁高效,充分体现了递归在处理树结构问题时的优势。希望通过这篇博客,你对二叉树的遍历和特殊性质的应用有了更深入的理解。
2025-02-07 16:58:27
495
原创 LeetCode LCR180文件组合
通过滑动窗口算法,我们可以高效地解决这个问题。滑动窗口的核心思想是通过动态调整窗口的大小,找到满足条件的连续子序列。这种方法不仅代码简洁,而且时间复杂度较低,非常适合处理类似的问题。希望这篇博客对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。
2025-02-01 22:16:33
1089
原创 LeetCode面试题 08.03魔术索引
通过解决魔术索引问题,我们深入理解了数组的遍历操作以及如何根据题目条件来灵活编写代码。虽然朴素遍历法在本题中能满足需求,但对于大规模数据,探索更高效的算法(如优化的二分查找等)具有重要意义,这也为我们在算法学习的道路上提供了更多的思考方向。希望本文能帮助你更好地理解和解决这一有趣的算法问题。
2025-01-16 09:33:36
668
原创 LeetCode1909 删除一个元素使数组严格递增
通过这个问题的解决,我们复习了数组的遍历、元素的比较、动态内存分配和释放等 C 语言编程中的重要概念。在处理类似问题时,我们可以采用这种先检查原状态,再进行尝试修改元素并检查的思路,同时要注意内存管理,避免内存泄漏等问题,确保程序的健壮性和正确性。,我们需要判断是否恰好删除一个元素后,该数组可以变成严格递增的,或者如果数组本身已经是严格递增的,也满足条件。如果原数组不是严格递增的,我们需要尝试删除每一个元素,然后检查删除该元素后的数组是否严格递增。的情况,说明原数组不是严格递增的,函数将返回。
2025-01-15 14:37:54
1212
原创 LeetCode2799 统计完全子数组的数目
这个问题展示了如何从一个简单的暴力算法逐步优化到一个更高效的算法。在处理数组问题时,滑动窗口是一个非常强大的工具,它可以帮助我们避免不必要的重复计算,提高算法的效率。同时,对于内存分配和数组范围的考虑也很重要,确保代码在处理各种输入时都能稳定运行。在实际编程中,我们需要时刻关注可能出现的边界情况和性能瓶颈,像这里的元素范围和内存分配问题,都是需要注意的细节。O%28n%29。
2025-01-14 16:12:13
785
空空如也
python项目运行的时候显示numpy error
2024-11-08
设计一个算法,根据一维数组建立一个单链表,并表中的数据元素与数组元素的次序相同
2023-10-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人