- 博客(5)
- 收藏
- 关注
原创 困难的摆动序列
为了找到最长的摆动子序列,我们可以通过删除单调坡度上的节点(不包括两端的节点)来保留尽可能多的峰值。这样,整个序列就会有最多的局部峰值,从而达到最长摆动序列的目的。希望这篇博客能帮助你更好地理解贪心算法在解决“最长摆动子序列”问题中的应用。具体来说,我们可以通过统计数组中的峰值数量来解决问题,而不需要实际删除元素。,找到其中最长的摆动子序列的长度。摆动子序列的定义是:相邻元素的差值正负交替变化。• 如果当前差值与前一个差值符号相反(即出现峰值),则峰值个数加1,并更新。,即为最长摆动子序列的长度。
2025-03-21 16:20:42
711
原创 回溯法模板!学到了学到了
回溯算法可以看作是一种特殊的递归算法,它通过递归的方式遍历所有可能的解空间,并在遍历过程中进行剪枝,避免不必要的计算。在回溯算法中,递归的终止条件通常是到达了问题的边界条件,例如到达了叶子节点或满足了某个特定的条件。对于每个选择,我们首先处理当前节点,然后递归地进行下一步的选择,最后在递归返回后撤销当前选择,回到上一步的状态。回溯算法的核心函数通常是一个递归函数,它的参数包括当前的状态、路径、选择列表等。循环遍历所有可能的选择,将当前选择的数加入。是当前递归层的路径,表示已经选择的数。
2025-03-17 21:40:04
432
原创 一分钟搞定合并二叉树
题目描述如下:给定两棵二叉树root1和root2,合并它们。合并规则是:如果两个节点重叠,那么它们的值相加作为新节点的值;如果只有一个节点存在,则直接作为新节点;如果两个节点都不存在,则新节点为null。
2025-03-16 16:34:26
950
原创 LeetCode 654: 最大二叉树 - 详细解析与多种解法
两种解法都采用了递归的思想,但在具体实现上有所不同:•解法一通过传递区间的左右边界来避免创建新的子数组,节省了空间。•解法二则直接通过分割数组来构建子树,代码更加直观,但空间开销较大。两种解法的时间复杂度相同,但解法一在空间复杂度上更优。根据实际需求,可以选择不同的实现方式。欢迎大家在评论区留言讨论,如果有任何问题或建议,也欢迎提出!关注我,获取更多数据结构与算法的干货内容!
2025-03-16 16:07:39
937
原创 一招搞定二叉树前序/中序/后序遍历!
前序遍历(Preorder Traversal):按照“根节点 -> 左子树 -> 右子树”的顺序访问节点。中序遍历(Inorder Traversal):按照“左子树 -> 根节点 -> 右子树”的顺序访问节点。后序遍历(Postorder Traversal):按照“左子树 -> 右子树 -> 根节点”的顺序访问节点。通过一个统一的模板代码,我们可以轻松实现二叉树的前序、中序和后序遍历。关键在于调整节点的压入顺序,并通过空指针标记当前节点是否需要被访问。
2025-03-13 10:31:46
252
成绩管理系统(C#课程设计)
2025-03-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人