算法练习
文章平均质量分 56
刷题思路的分享
Maỿbe
记录自己的学习过程
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
力扣hot图论部分
本文总结了LeetCode中四个典型算法问题的解法:1. 岛屿数量(FloodFill算法):使用BFS遍历相邻陆地,通过visit数组标记已访问节点;2. 腐烂的橘子(多源BFS):统计新鲜橘子数,多源点同时扩散,注意时间计数方式;3. 课程表(拓扑排序):建立邻接表统计入度,通过BFS检测环;4. 前缀树:实现Trie结构,支持插入和查询操作。每个问题都提供了核心思路和关键代码实现,重点讲解了算法细节和注意事项。原创 2025-12-18 13:46:51 · 688 阅读 · 0 评论 -
暴打力扣之优先级队列(堆)
本文探讨了解决TOP-K问题的三种方法:优先队列、手动实现堆和快速选择法。在LeetCode第215题和第347题中,作者分别使用这三种方法进行实现。优先队列方法简单直接,手动实现堆能更好理解堆结构,快速选择法通过三数取中优化达到平均O(N)时间复杂度。三种方法各有优劣:优先队列稳定但效率一般(O(NlogK)),快速选择法平均效率高但不稳定,手动实现堆则更具学习价值。文章详细展示了每种方法的代码实现,并比较了它们的适用场景,为处理TOP-K问题提供了全面的解决方案参考。原创 2025-12-01 22:11:06 · 914 阅读 · 0 评论 -
暴打力扣hot的普通数组专题
本文总结了LeetCode三道题目的解题思路与代码实现:1. 除自身以外数组的乘积(238题)采用左右乘积数组法,时间复杂度O(n),空间复杂度O(n);2. 合并区间(56题)先排序后合并重叠区间,时间复杂度O(nlogn);3. 缺失的第一个正数(41题)提供了三种解法:排序二分查找(O(nlogn))、哈希集合(O(n))和原地哈希(最优解O(n))。其中原地哈希法通过元素归位策略实现最优时空复杂度,是推荐的解决方案。原创 2025-11-24 19:56:48 · 408 阅读 · 0 评论 -
暴打力扣hot中的链表专题
本文分享了力扣Hot链表专题中最具代表性的三道题目的解题思路和代码实现。23题合并K个升序链表提供了优先级队列和归并两种解法,其中归并分治的方法更为推荐;146题LRU缓存通过双向循环链表加哈希表实现,重点讲解了虚拟头节点的作用;148题排序链表采用归并排序,虽然迭代解法空间复杂度更优,但归并排序更具通用性。文章详细分析了每道题的解题思路和代码实现要点,难度依次递增,为链表问题提供了实用的解决方案。原创 2025-11-17 21:36:45 · 1613 阅读 · 1 评论 -
回溯专题之二叉树
本文分享了四道力扣热题二叉树问题的DFS递归解法。通过回溯训练后,作者发现递归在二叉树问题中非常巧妙。具体题目包括:199.二叉树的右视图(DFS遍历记录每层最右节点)、114.二叉树展开为链表(前序遍历重构)、437.路径总和III(双重递归统计路径)和124.二叉树最大路径和(后序遍历计算子树贡献值)。每道题都提供了思路分析和Java代码实现,展示了DFS+递归在不同场景下的灵活应用。通过这些问题,作者体会到递归思维对解决二叉树问题的重要性。原创 2025-11-10 21:29:16 · 400 阅读 · 0 评论 -
回溯专题-N皇后/单词搜索
文章摘要:本文介绍了两种回溯算法的优化解法:N皇后问题和单词搜索。在N皇后问题中,通过使用三个布尔数组(列、左对角线、右对角线)替代传统四重循环检查,提升了效率。单词搜索则采用向量数组(dx/dy)简化四方向遍历,避免重复代码。两种解法均通过DFS+回溯实现,并强调恢复现场的重要性。相比力扣官方题解,这些技巧使代码更简洁高效,分别为N皇后问题和单词搜索问题提供了优化方案。原创 2025-11-03 22:37:22 · 489 阅读 · 1 评论 -
回溯专题:子集/全排列问题
摘要:本文分析了力扣78题(子集)和46题(全排列)的解题思路。两者都采用深度优先遍历(DFS)和回溯法,使用全局变量path和ret简化函数设计。子集问题通过递归遍历每个元素的选与不选两种情况,全排列问题则利用check数组剪枝。核心要点包括:决策树的构建、回溯时现场恢复、递归终止条件处理。两题解法高度相似,只要能列出所有情况(画出决策树),都可使用DFS+回溯法解决。(149字)原创 2025-10-30 22:18:51 · 485 阅读 · 0 评论 -
动态规划之两个字符组/两个数组的dp问题
本文分析了LeetCode上两道字符串动态规划问题:1143.最长公共子序列和72.编辑距离。最长公共子序列通过构建二维DP数组,当字符相同时取左上角值+1,否则取左或上较大值。编辑距离同样使用二维DP,初始化边界后,字符相同时取左上角值,不同则取左、上、左上最小值+1。两题都采用类似DP思路,但状态转移方程不同,体现了字符串匹配问题的不同解法。代码实现中均对字符串前补空格便于处理边界条件。原创 2025-10-20 22:49:49 · 1625 阅读 · 0 评论 -
动态规划之回文串相关问题
【摘要】本文介绍了回文子串问题的两种动态规划解法。对于647题(统计所有回文子串数量),通过构建n×n的布尔矩阵f[i][j]表示s[i..j]是否为回文,遍历时比较首尾字符并根据子问题结果填充矩阵,最后统计true的数量。5题(寻找最长回文子串)采用相同思路,在填充矩阵后记录最长回文子串的起始位置和长度。两题核心均为:f[i][j] = (s[i]==s[j]) && (j-i<2 || f[i+1][j-1]),时间复杂度O(n²),空间复杂度O(n²)。原创 2025-10-13 20:39:52 · 1538 阅读 · 0 评论 -
动态规划-子数组问题-单词拆分
该摘要介绍了力扣第139题"单词拆分"的动态规划解法。使用布尔数组f[i]表示前i个字符能否被拆分,初始化f[0]=true。通过双重循环遍历所有可能的子串,若f[j-1]为true且剩余子串在字典中,则f[i]置为true。最终返回f[n]即为答案,时间复杂度O(n²)。文中包含完整Java代码实现和测试用例。原创 2025-10-08 10:20:43 · 1322 阅读 · 0 评论 -
动态规划之买卖股票的最佳时机III和IV
这篇文章介绍了LeetCode上两道利用动态规划解决股票买卖问题的题目:123题(最多交易2次)和188题(最多交易k次)。两题的解题思路相似,通过状态转移方程计算持有(f)和未持有(g)股票时的最大利润。代码实现上,123题使用固定交易次数3种状态,188题则根据输入的k值动态调整状态数。关键点在于初始化边界条件,并通过双重循环递推计算每天每种交易次数下的最优解,最终返回最大利润。两题解法可相互推广,区别仅在于交易次数的参数化处理。原创 2025-09-29 08:30:00 · 1783 阅读 · 0 评论 -
动态规划之不同路径+不同路径II
本文介绍了力扣上两道动态规划题目:62.不同路径和63.不同路径II。不同路径是基础题,要求计算从网格左上角到右下角的路径总数,使用二维数组存储中间状态,通过状态转移方程dp[i][j]=dp[i-1][j]+dp[i][j-1]求解。不同路径II是进阶题,增加了障碍物判断,遇到障碍物时路径数为0,否则沿用相同状态转移方程。代码实现展示了两种情况的处理方式,其中不同路径II需要额外判断obstacleGrid[i-1][j-1]是否为1。两道题都采用动态规划思想,时间复杂度O(mn),空间复杂度O(mn)。原创 2025-09-22 08:45:00 · 1745 阅读 · 1 评论 -
动态规划-解码方法
本文介绍了使用动态规划解决LeetCode第91题"解码方法"的步骤。关键点包括:1)状态表示dp[i]表示前i个字符的解码方法数;2)状态转移方程根据当前字符是否能单独解码(1-9)或与前一个字符组合解码(10-26)来划分;3)初始化时需处理边界条件;4)代码实现中需讨论多种情况,包括单独解码和组合解码的成功/失败情况。该方法通过动态规划逐步计算每个位置的可能解码方式,最终返回字符串整体的解码方法总数。原创 2025-09-17 18:39:18 · 1611 阅读 · 0 评论 -
栈专题之每日温度
本文介绍了解决"每日温度"问题的两种方法:1.暴力解法(O(N^2)),通过双重循环比较温度,但会超时;2.优化的单调栈解法(O(N)),利用栈存储下标,从右向左处理,遇到更高温度时计算天数差。代码展示了如何用栈高效实现,比暴力解法更优。原创 2025-09-08 18:49:57 · 1949 阅读 · 1 评论 -
哈希专题之字母异位词分组
本文提供了LeetCode第49题"字母异位词分组"的Java解法。核心思路是通过哈希表将排序后的字符串作为键,原始字符串列表作为值。代码实现中,首先将字符串排序生成统一键,然后分组存储异位词。原创 2025-09-01 08:30:00 · 1893 阅读 · 1 评论 -
二分查找之搜索旋转排序数组
【摘要】本文实现了一个在旋转排序数组中搜索目标值的算法。通过二分查找先确定旋转点m,再根据目标值与数组首尾元素的关系,在左侧或右侧子数组中进行二分查找。考虑了数组未旋转、长度为1等特殊情况,时间复杂度为O(log n)。测试用例验证了算法的正确性。原创 2025-08-26 11:13:00 · 1522 阅读 · 0 评论 -
在排序数组中查找元素的第一个和最后一个位置(使用二分查找解决)
摘要:本文介绍了在排序数组中查找目标元素起始和结束位置的两种方法。暴力解法通过遍历数组记录目标值首次和末次出现的位置,时间复杂度O(n)。更优的二分查找解法通过两次二分搜索分别定位左右边界:第一次二分找左端点时采用左中位数,第二次找右端点时采用右中位数,时间复杂度O(logn)。关键点在于正确处理二分边界条件和中点选取方式,避免死循环。两种方法都需处理数组为空或目标不存在的情况。原创 2025-08-20 12:17:29 · 1515 阅读 · 1 评论 -
滑动窗口问题之水果成篮
摘要:本文介绍了LeetCode第904题"水果成篮"的两种解法。暴力解法使用双重循环和HashSet判断水果种类,时间复杂度O(N^2)导致超时。优化解法采用滑动窗口配合HashMap记录水果种类及其数量,通过维护左右指针动态调整窗口大小,时间复杂度降为O(N)。当窗口内水果种类超过2时,移动左指针并更新HashMap,始终保持窗口内最多两种水果,从而高效求出最大连续子数组长度。滑动窗口法显著提升了算法效率。原创 2025-08-13 11:16:41 · 1516 阅读 · 0 评论 -
Hanoi问题(汉诺塔问题)
有三根柱子,分别为A柱,B柱,C柱。有n个圆盘,按从大到小的顺序编号,依次排列在A柱,要求把所有圆盘都移动到C柱,且大的圆盘始终在小的圆盘之上。原创 2025-03-03 16:34:10 · 365 阅读 · 0 评论 -
爬楼梯问题
本次的分享就到此为止啦,可以看看我以前写的关于汉诺塔(hanoi)问题,把这两个问题放在一起理解。可以加深对递归的理解。下次见啦。原创 2025-03-19 18:25:05 · 240 阅读 · 0 评论 -
一些SingleLinkedList题的解题思路
我的分享到此为止。下次见!原创 2025-04-18 08:26:59 · 564 阅读 · 0 评论 -
二叉树进阶的解题思路
二叉树的递归我觉得其实很难。我花了大量时间,这张思维导图,我用了好久好久的时间。这几天被递归搞得很心累,导致自己这几天也挺压抑的。刚开始学习的时候,我一直想搞清楚递归的每个过程,但是递归的计算是巨大且繁琐的。一道题要花好长好长的时间。然后今天晚上,我去B站上搜索关于递归的视频,偶然看到几句话让我醍醐灌顶,我想说出来,希望对大家有帮助。1.使用递归,不要老想着,想弄清楚全部过程,人的脑子能算多少,这是计算机的工作.2.要想子问题的结果。所谓递归,就是一个大问题,转化为子问题,子问题的处理方式同大问题.原创 2025-04-24 22:32:54 · 294 阅读 · 0 评论 -
简单的树的解题思路
希望可以帮助到大家啦。see U~~~原创 2025-04-23 13:37:37 · 286 阅读 · 0 评论 -
使用Set和Map解题思路
再见~原创 2025-05-01 17:36:43 · 386 阅读 · 0 评论 -
Top-k问题的解法
TOP-K问题:即求数据集合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。面试题 17.14. 最小K个数 - 力扣(LeetCode)本次的分享完毕啦~~bye~~原创 2025-04-27 14:23:39 · 370 阅读 · 0 评论
分享