- 博客(16)
- 收藏
- 关注
原创 【推荐系统】矩阵分解之FunkSVD和BiasSVD
推荐系统中,BiasSVD 通过引入偏置项,解决了 FunkSVD 无法区分 “系统性偏差” 和 “用户 - 物品交互” 的问题,是更常用的矩阵分解模型。在实际应用中,BiasSVD 通常比 FunkSVD 表现更好,尤其在评分数据稀疏时,偏置项的作用更为明显。
2025-11-13 20:15:36
863
原创 【LeetCode】236.二叉树的最近公共祖先
摘要 本文探讨了二叉树中寻找两个节点最近公共祖先(LCA)的问题。通过递归方法,利用后序遍历从下往上搜索,分两种情况处理:当p和q分居当前节点左右子树时,当前节点即为LCA;当p在q的子树中时,直接返回先找到的节点。递归终止条件是遇到空节点或找到目标节点。算法时间复杂度O(N),空间复杂度O(h),其中h为树高。
2025-11-11 22:00:12
649
原创 【LeetCode】173.二叉搜索树迭代器
本文实现了一个二叉搜索树迭代器BSTIterator,支持中序遍历的惰性求值。关键点在于: 使用栈模拟递归,仅保存当前路径节点,空间复杂度O(h); next()方法每次弹出栈顶元素,并将右子树的左链压栈,保证每次返回最小值; hasNext()判断栈或当前节点是否为空; 均摊时间复杂度O(1),符合迭代器按需访问的特性,避免了一次性遍历的高内存消耗。该设计充分利用BST的中序有序特性,实现高效渐进式遍历。
2025-11-11 21:10:12
743
原创 【LeetCode】222. 完全二叉树的节点个数
本文介绍了计算完全二叉树节点数的两种方法: 递归法:适用于所有二叉树,直接递归计算左右子树节点数之和加1,简单但未利用完全二叉树特性。 优化方法:利用完全二叉树特性,通过比较左右子树高度来分情况计算: 若左右高度相等,则左子树为满二叉树,可直接计算其节点数(2^高度-1),再递归计算右子树 若高度不等,则右子树为满二叉树,直接计算其节点数,再递归计算左子树 使用位运算(1<<高度)快速计算2的幂次 该方法时间复杂度为O(logN * logN),比普通递归法的O(N)更高效。
2025-11-10 23:16:40
582
原创 【LeetCode】124.二叉树中的最大路径和
摘要 该题要求计算二叉树中的最大路径和。路径定义为节点序列,相邻节点间有边相连,节点不重复出现。解决方法采用递归遍历:对于每个节点,计算其左/右子树的最大贡献值(若为负则取0),然后以该节点为根的路径和可能是当前值加上左右贡献值。使用全局变量记录遍历过程中的最大值。时间复杂度O(n),空间复杂度O(n)。Java实现通过递归函数计算子树贡献值并更新全局最大路径和。
2025-11-09 16:29:21
226
原创 【LeetCode】129.求根节点到叶节点数字之和
本文介绍了解决二叉树路径总和问题的两种方法。对于「根到叶数字之和」问题,采用深度优先搜索,在遍历过程中累计路径数字,当到达叶子节点时将路径数字加入总和。对于「路径总和」问题,通过递归从目标值中减去节点值,判断是否存在路径满足条件。两种方法时间复杂度均为O(n),空间复杂度为O(n)。文末提供了对应的Java实现代码。
2025-11-09 15:21:11
257
原创 【LeetCode】105.从前序与中序遍历序列构造二叉树
本文介绍了如何通过二叉树的前序和中序遍历序列重建原二叉树。前序遍历的第一个元素是根节点,在中序遍历中找到该节点位置,其左侧构成左子树,右侧构成右子树。递归处理左右子树即可完成构建。实现时使用哈希表存储中序节点位置以优化查询效率。时间复杂度O(n),空间复杂度O(n)。代码展示了Java实现,通过辅助函数处理子树边界,最终返回完整二叉树结构。
2025-11-04 16:28:59
144
原创 【LeetCode】101.对称二叉树
本文通过递归方法判断二叉树是否轴对称。轴对称的条件包括:左右节点都为空返回true;若仅一侧为空则返回false;当节点值不等时返回false;否则递归检查左节点的左孩子与右节点的右孩子,以及左节点的右孩子与右节点的左孩子是否对称。代码简洁地实现了这一逻辑,通过比较左右子树来判断整棵树的对称性。
2025-11-03 22:09:37
254
原创 【LeetCode】226.翻转二叉树
摘要 本文介绍了如何通过递归方法翻转一棵二叉树。核心思路是从顶向下依次交换每个节点的左右子树。递归过程包括:当节点为空时终止;否则先递归翻转左右子树,再交换当前节点的左右指针。时间复杂度为O(n),每个节点访问一次。空间复杂度取决于树高h,最坏O(n),平衡树时为O(log n)。代码示例展示了Java实现,简洁高效地完成了二叉树翻转任务。
2025-11-03 21:44:07
221
原创 【LeetCode】134.加油站
该问题要求在环形加油站路线上找到一个起点,使得汽车可以绕行一周。关键思路是:1) 如果总油量不足以覆盖总消耗,则无解;2) 贪心算法优化,当从起点到某点的油量不足时,直接跳过中间所有点作为候选起点。具体实现:遍历时将当前油量差累计在tank中,若tank为负则重置起点,同时计算总油量差total。最终若total≥0则唯一解为最后记录的起点,否则无解。时间复杂度O(n),空间O(1)。
2025-11-01 17:09:35
869
原创 【LeetCode】274.H指数
本文介绍了计算研究者H指数的方法。H指数定义为:研究者至少有h篇论文,每篇被引用至少h次。解决方案是先对引用次数数组进行排序,然后从高到低遍历,找到最大的h满足citations[i]≥h(其中h=n-i)。代码示例提供了两种实现方式:升序排列后反向遍历,或直接正向遍历。时间复杂度为O(n log n)(主要由排序决定),空间复杂度为O(1)。核心思想是通过排序和线性扫描高效确定最大H指数。
2025-10-30 12:02:57
239
原创 【LeetCode】45.跳跃游戏II
本文介绍了使用贪心算法求解跳跃游戏II问题的方法。给定一个整数数组nums表示每个位置的最大跳跃长度,计算从数组起点到终点的最小跳跃次数。关键思路是通过维护当前跳跃范围[start, end],在每步中选择能跳到的最远位置maxStep,直到覆盖终点。算法实现循环更新跳跃范围,每跳一次增加步数计数。时间复杂度为O(n),空间复杂度O(1)。代码展示了Java实现,适用于解决类似的最优路径问题。
2025-10-30 10:49:35
102
原创 【RL初学-3】Safety-critical and Robust sysytem 的一些思考
优先保障安全性的策略首先要求确保在任何情况下,智能体都不能进入危险区域,而后再逐步引入不确定性并优化鲁棒性。这种方法能够有效地保证智能体在安全性上不妥协,并在此基础上逐步增强其对环境不确定性的适应能力。在实际应用中,这对于那些高度依赖安全性(如自动驾驶、医疗机器人等)且可能面对动态环境的任务尤为重要。
2024-11-25 22:09:18
865
原创 【RL初学-2】处理分段线性的Lyapunov函数的Subgradient方法
Subgradient方法是一个强大的工具,适用于处理非光滑凸优化问题。通过合理选择步长和改进策略,可以有效地求解复杂的优化问题。
2024-11-25 22:08:47
661
原创 【RL初学-1】如何利用gym中倒立摆的源码绘制角度-角速度轨迹
通过这种方式,我们可以在每次迭代过程中实时绘制角度和角速度的关系曲线。注:部分为GPT生成,仅供个人备忘所用。
2024-09-21 10:36:56
468
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅