- 博客(16)
- 收藏
- 关注
原创 链表中的下一个更大节点:栈的巧妙应用
本题的核心是用单调栈优化 “找下一个更大元素” 的过程,将暴力法的O(n²)复杂度降至O(n),满足题目对效率的要求。其本质是利用栈的 “后进先出” 特性,将 “尚未解决的问题(未找到更大值的节点)” 暂存,后续遇到合适节点时再批量处理,避免重复遍历。
2025-11-11 21:34:18
638
原创 LeetCode338.比特位计数:从奇偶性入手的极简解法
通过利用数字奇偶性的特征,我们避免了对每个数字进行二进制解析的繁琐操作,转而通过前序结果推导出当前结果,实现了高效的动态规划解法。。
2025-11-06 15:42:37
184
原创 二叉树打家劫舍:用 DFS + 状态定义破解树形
/ 偷当前节点的最大金额// 不偷当前节点的最大金额这个结构体是算法的 “桥梁”,它将每个子树的决策结果封装,让递归过程能高效传递信息,避免重复遍历子树。二叉树打家劫舍的核心是 状态定义 + 递归传递:通过定义清晰的节点状态(如本文的),将复杂的树形问题拆解为每个节点的局部决策,再通过递归向上汇总结果。这种思路可推广到其他树形动态规划问题(如 “二叉树中的最大路径和”),关键在于明确每个节点的状态含义和转移逻辑。
2025-11-04 20:50:46
919
原创 解决 “打家劫舍” 问题:动态规划
设dp[i]表示 “偷窃前i+1间房屋(即第 0 到第 i 间)能获得的最高金额”。这里要注意数组下标对应:比如dp[0]是前 1 间(第 0 间)的最高金额,dp[1]是前 2 间(第 0、1 间)的最高金额。定义 DP 状态:明确dp[i]代表什么场景下的最优解(比如 “前i+1间房的最高金额”);推导递推公式:分析当前状态的所有可能选择,用子问题的最优解推导当前状态的最优解;初始化边界值:确定递推公式依赖的初始状态(比如dp[0]dp[1]确定遍历顺序。
2025-11-02 14:41:31
669
原创 最长递增子序列个数(LIS Count)的高效解法
用d数组维护各长度子序列的最小尾元素,通过二分快速确定新元素的最长子序列长度。用cnt数组的前缀和设计,避免遍历累加,快速计算子序列个数。自定义二分查找函数提升代码灵活性,无需重复编写二分逻辑。这种思路不仅高效解决了 “统计最长递增子序列个数” 的问题,也为类似 “需追踪路径数量的动态规划问题” 提供了参考。
2025-10-30 21:01:03
431
原创 位操作符深度解析
位操作符是连接高级语言与计算机底层的桥梁,n&(n-1)n&(-n)n|(n+1)等经典操作更是凝聚了开发者对二进制特性的深刻理解。它们不仅能实现常规运算难以企及的效率,更能简化复杂逻辑、节省内存空间。
2025-10-27 09:52:19
953
原创 LeeCode576.网格球出界路径数的动态规划解法
这个问题通过动态规划的方法,将复杂的路径计数问题分解为可逐步求解的子问题。核心思想是跟踪每一步移动后球在网格中的位置分布,从而高效计算出所有可能的出界路径数量。这种解法充分利用了问题的特性,通过状态转移方程清晰地表达了路径数量的传递关系,既高效又易于理解,是动态规划在网格路径问题中的典型应用。
2025-10-23 20:15:00
524
原创 LeeCode1575.城市路径计数问题的动态规划解法
这个问题通过记忆化搜索(动态规划的递归实现)优雅地解决了路径计数问题。核心思想是将问题分解为子问题,通过缓存子问题的解来避免重复计算,大大提高了效率。这种解法充分利用了问题的约束条件,将一个看似复杂的路径搜索问题转化为可高效计算的动态规划问题,展示了算法设计中 "以空间换时间" 的经典思想。
2025-10-22 20:32:35
363
原创 LeeCode64.最小路径和问题(动态规划解法)
给定一个包含非负整数的 m x n 网格 grid,找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。对于其他位置,取上方和左方路径和中的较小值,加上当前单元格的值,得到到达当前位置的最小路径和。:O (m×n),其中 m 和 n 分别是网格的行数和列数。对于其他位置,最小路径和等于上方和左方路径和中的较小值加上当前单元格的值。第一列的每个元素只能从上方到达,所以路径和是当前值加上上方元素的路径和。第一行的每个元素只能从左边到达,所以路径和是当前值加上左边元素的路径和。
2025-10-16 20:11:53
280
原创 不同路径问题及障碍物版本的动态规划解法
两个问题都采用了动态规划的思想来解决,核心是找到状态转移方程。第二个问题在第一个问题的基础上增加了障碍物的处理,并通过使用一维数组优化了空间复杂度。动态规划方法非常适合这类路径计数问题,通过分解问题、定义状态和状态转移方程,可以高效地求解。
2025-10-15 20:00:21
669
原创 LeeCode32.最长有小括号(动态规划)
栈方法是解决最长有效括号问题的高效方法,通过存储索引而不是括号本身,我们能够方便地计算有效子串的长度。这种方法思路清晰,实现简单,并且具有良好的时间和空间复杂度。
2025-10-14 23:15:37
754
原创 LeeCode42.接雨水问题的详细题解
双指针法是解决接雨水问题的最优方法之一,它通过巧妙地移动指针和维护最大高度,在 O (n) 时间和 O (1) 空间内解决了问题。这种方法的核心在于理解:每个位置能接住的雨水量由其左右两侧的最大高度中较矮的那个决定。
2025-10-14 19:18:18
405
原创 网络延迟时间问题:Dijkstra 算法的解决方案解析
给定n个网络节点(标记为 1 到n)、有向边的传输时间列表times表示信号从u_i到v_i的传递时间为w_i),以及源节点k。信号从k发出后,使所有节点都收到信号的最小时间(即源节点到所有节点的最短路径中,最长的那条路径的长度);若存在节点无法收到信号(网络不连通),则返回-1。网络延迟时间问题本质是 “单源最短路径的最大值”,适合用 Dijkstra 算法求解;邻接矩阵适合小规模图(n≤100),实现简单且效率足够;关键步骤:图的存储、距离初始化、贪心选节点、松弛操作、结果判断。
2025-09-28 22:40:38
957
原创 二叉树最大路径和:从数据结构到算法实现的深度解析
本文探讨了二叉树中的"最大路径和"问题,阐述了其核心挑战在于路径可以任意起始和终止,且节点值可能为负。通过结合深度优先搜索和动态规划思想,提出了一种递归解决方案:从叶子节点向上遍历,计算每个节点作为顶点的四种可能路径情况,维护全局最大值。文章详细解析了算法实现,包括边界条件处理、复杂度分析(O(n)时间,O(h)空间)以及特殊情况考虑,展示了如何将复杂问题分解为子问题进行递归求解。该解决方案适用于各类二叉树路径问题,体现了DFS在树结构中的典型应用模式。
2025-09-28 22:34:44
921
原创 二叉树构造:从遍历序列到树形结构的实现与解析
对比维度先序 + 中序构造中序 + 后序构造根节点位置先序序列第一个元素后序序列最后一个元素递归顺序先左子树,后右子树先右子树,后左子树时间复杂度O (n²)(遍历中序找根)O (n²)(遍历中序找根)空间复杂度O (n)(递归栈 + 节点内存)O (n)(递归栈 + 节点内存)适用场景已知先序和中序序列已知中序和后序序列。
2025-09-28 22:24:20
695
原创 LeetCode49.字母异位词分组(C语言实现)
printf("输入: strs = [\"eat\", \"tea\", \"tan\", \"ate\", \"nat\", \"bat\"]\n");所以,我们可以通过对每个字符串进行排序,将字母异位词转换为相同的“键”,然后根据这个“键”进行分组。假设每个字符串的平均长度为 k ,字符串数组的长度为 n ,则时间复杂度为 O(nk\log k)。1. 排序字符串: sortString 函数使用冒泡排序对字符串进行排序,使得字母异位词排序后得到相同的字符串,作为分组的“键”。
2025-09-15 12:37:41
919
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅