20250124_深度优先遍历问题
深度优先遍历问题问题描述二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 解题思路 基本概念 二叉树的深度是从根节点到最远叶子节点的路径上的节点数 叶子节点是指没有子节点的节点 空节点的深度为 0 递归思路 一个节点的最大深度 = max(左子树深度, 右子树深度) + 1 递归的终止条件:当节点为空时,返回 0 DFS(深度优先搜索)过程 123456对于每个节点:├── 如果节点为空│ └── 返回 0├── 递归计算左子树的深度├── 递归计算右子树的深度└── 返回 max(左子树深度, 右子树深度) + 1 示例分析 1234567891011121314例如对于树: 3 / \ 9 20 / \ 15 7计算过程:1. 节点3的深度 = max(节点9的深度, 节点20的深度) + 12. 节点9的深度 = max(0, 0) + 1 = 13. 节点20的深度 = max(节点15的深度, 节点7的深度) + 14. 节点15和7的深度都是 15. 所以节点20的深度是 26....
20250124-leetcode2944购买水果需要的最少金币数
给你一个 下标从 1 开始的 整数数组 prices ,其中 prices[i] 表示你购买第 i 个水果需要花费的金币数目。 水果超市有如下促销活动: 如果你花费 prices[i] 购买了下标为 i 的水果,那么你可以免费获得下标范围在 [i + 1, i + i] 的水果。注意 ,即使你 可以 免费获得水果 j ,你仍然可以花费 prices[j] 个金币去购买它以获得它的奖励。 请你返回获得所有水果所需要的 最少 金币数。 示例 1: 输入:prices = [3,1,2] 输出:4 解释: 用 prices[0] = 3 个金币购买第 1 个水果,你可以免费获得第 2 个水果。用 prices[1] = 1 个金币购买第 2 个水果,你可以免费获得第 3 个水果。免费获得第 3 个水果。请注意,即使您可以免费获得第 2 个水果作为购买第 1 个水果的奖励,但您购买它是为了获得其奖励,这是更优化的。 示例 2: 输入:prices = [1,10,1,1] 输出:2 解释: 用 prices[0] = 1 个金币购买第...
20250122-leetcode_168_打家劫舍
题目 解题思路这是一个典型的动态规划问题。对于每个房屋,我们有两种选择: 偷这个房子:那么就不能偷相邻的前一个房子,但可以偷前前一个房子 不偷这个房子:那么最大金额就是偷到前一个房子为止的最大金额 定义状态: dp[i] 表示偷窃前i个房屋能够获得的最大金额 状态转移方程: dp[i] = max(dp[i-1], dp[i-2] + nums[i]) 状态方程表示的两种可能的含义: 当dp[i-1]>dp[i-2]+nums[i] 时,偷dp[i-1] 反之则不偷第i个房子dp[i-1]。偷第i个房子,加上前前个房子 nums[i]+dp[i-2] 边界条件: dp[0] = nums[0]:只有一个房子时 dp[1] = max(nums[0], nums[1]):有两个房子时,选择金额较大的那个 代码实现1234567891011121314151617class Solution: def rob(self, nums: List[int]) -> int: if not nums: ...
LeetCode 746 - 使用最小花费爬楼梯
LeetCode 746 - 使用最小花费爬楼梯题目描述给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费。 1. 问题分析这是爬楼梯问题的变体,主要区别是: 每个台阶都有一个花费 可以从索引0或1开始 目标是到达顶部(数组长度位置)的最小花费 2. 解题思路状态定义dp[i] 表示:到达第i个台阶的最小花费 状态转移方程dp[i] = min(dp[i-1], dp[i-2]) + cost[i] 解释:到达第i个台阶可以从: 第i-1个台阶爬1步上来 第i-2个台阶爬2步上来 选择这两种方式中花费较小的一种 代码实现和详细解释1234567891011121314151617181920212223242526272829303132333435363738class Solution: def minCostClimbingStairs(self,...
20250121-leetcode2218
如何便利所有的情况比大小解题思路1. 问题分析这是一个典型的动态规划问题,我们需要: 从n个硬币栈中,每次只能从栈顶取硬币 总共取k次 求取得的硬币面值和的最大值 关键点: 每个栈都是从顶到底排列的 每次只能取栈顶的硬币 必须恰好取k个硬币 2. 动态规划设计状态定义dp[i][j] 表示:从前i个栈中取j个硬币能获得的最大面值和 状态转移对于第i个栈,我们可以: 不从这个栈取硬币:dp[i][j] = dp[i-1][j] 从这个栈取x个硬币:dp[i][j] = dp[i-1][j-x] + (第i个栈顶部x个硬币的和) 最终的状态转移方程:dp[i][j] = max(dp[i-1][j], dp[i-1][j-x] + sum(piles[i]前x个))其中x的范围是:1 ≤ x ≤ min(栈i的大小, j) 初始化 dp[0][0] = 0 其他初始值设为负无穷,表示无法达到 结果最终答案就是dp[n][k],表示从n个栈中取k个硬币的最大面值和 3....
近期思考与感悟
人际关系的处理面对矛盾要及时沟通长期相处的人(如爱人、工作中的领导),不要躲避矛盾,要勇于面对。因为矛盾的产生往往源于双方思想观念的不一致,长期积累会让自己变得很拧巴,可能导致后期更大的矛盾。 沟通技巧保持话题的专注度在吵架和辩论的过程中,当对方发现自己观点有不足时,往往会转移话题到对自己有利的方向。要警惕这种转移,始终保持对核心问题的关注。 表达要全面且有理据想法的提出要全面,并且要有充分的理由支撑自己的选择。记住,每一次发言都是展现自己的机会。 自我管理压力管理不要让压力影响到自己的日常计划和生活节奏。要学会将压力与日常工作生活分开,保持系统正常运转。
20250116-Hexo 搭建
1.本地搭建 hexo 静态博客 安装 hexo 框架: 打开 cmd 运行 $ npm install -g hexo-cli 新建一个文件夹,如 MyBlog ,进入该文件夹内,右击运行 git ,输入: $ hexo init 生成完 hexo 模板,安装 npm ,运行: $ npm install 没错,博客的主体部分到此已经完成了,来看看效果吧。运行: $ hexo server 这时候打开浏览器,输入 localhost:4000 就可以看到博客目前的样子了。小小激动一下,然后按 Ctrl + C 就可以继续下面的操作了。 ## 2 2.hexo 主题选择$ git clone https://github.com/theme-next/hexo-theme-next themes/next 打开根目录下的 _config.yml,修改字段 theme 为: theme: next 3.hexo 与 github 分支 创建一个source 分支,本地部署修改用. 创建master 分支。用来存储静态的网站文件,这些文件都是通过hexo generate...
20250116-UE5 demo学习
UE5 Demo学习笔记学习资源 教程视频链接 1. 角色系统导入动画资源,绑定骨架混合空间1D,作用通过一个值来控制两个动画的混合,这里的值是模型移动的speed 动画蓝图中的事件图表,可以获取所有者的移动速度 状态机因为混合空间1D的值是模型移动的speed,例如跳越的动作就无法完成。所以引入状态机 1.1 角色动画系统 动画状态机 动画蓝图 动画过渡 1.2 角色移动系统 基础移动设置 角色控制器 输入系统 1.3 角色交互系统 碰撞检测 交互事件 动画通知 2. 游戏系统2.1 游戏框架 游戏模式 游戏状态 玩家状态 2.2 关卡设计 场景搭建 光照系统 特效系统 2.3 UI系统 HUD设计 菜单系统 交互界面