2026.05.25征图日记21(观看骏哥录制的讲解视频)

上集说到奶奶病危,第二天凌晨一点,爸妈给我发消息说奶奶情况好转,不需要回来了,这个消息我是早上4点收到的,当时我起来准备去机场。之后就把机票退了,也睡不着,搬到6甲这边这个室友晚上要打呼,而且是我遇到过的声音最大的人。就在玩手机,到78点,打呼的哥们起来了,我也就睡了,睡到11点起来。

今天上午来了之后把上星期的:拍照之后裁切图片之后对应缺陷面积变大 的bug看了一下,用Ai修了一下(不知道修得对不对)。之后就在一边看webAi的代码一边刷L站,想起来骏哥发我了一个他当时讲解代码的视频,于是我下午就在看这个视频。看得我想睡觉,讲了项目的结构,如何启动项目,项目中的数据库表结构(大部分都在讲这个),一个app里面有哪些基本文件,分别都是干什么的。看得我快睡着了。

下午基本都在摸鱼,还看了看mentor在做的agent,之后就在刷力扣,感觉今天状态不是很好,就是因为那个哥们的呼噜,烦死了

还是需要学习一下redis,还有测试课程,算法(每天上班的时候刷两道)也不能拉下

最近jack叔叔开了一个收费会员,每天会在里面发自己的一些记录,感想,12¥/月我还在犹豫要不要加入,我觉得应该不是割韭菜。我需要这种精神力量~

完全平方数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Solution {
public:
int numSquares(int n) {
// dp[i]表示组成i的最少完全平方数的个数
vector<int> dp(n + 1, INT_MAX);
dp[0] = 0;
// 注意j的边界条件
for (int i = 1; i < n + 1; ++i) {
for (int j = 1; j * j <= i; ++j) {
dp[i] = min(dp[i], dp[i - j * j] + 1);
}
}
return dp[n];
}
};

// 完全背包问题:定义 dp[i] 表示组成 i 的最少完全平方数个数
// 先选一个完全平方数 j*j(≤ i)
// 剩下的数字是 i - j*j
// 组成 i 的总个数 = 组成 i - j*j 的个数 + 1

// dp[i] = min( dp[i - 1*1] + 1, // 选 1
// dp[i - 2*2] + 1, // 选 4
// dp[i - 3*3] + 1, // 选 9
// ...
// dp[i - k*k] + 1 ) // 选 k*k (k*k ≤ i)

// 重叠子问题:
// 关键观察:对于组成 i 的最优方案,假设它使用的最后一个完全平方数是 j*j(即方案中最后加上的那个平方数)。
// 去掉这个 j*j 后,剩下的部分就是 i - j*j 的一个组成方案
// 而且这个剩下的方案,一定也是组成 i - j*j 的最优方案

// 转移公式:
// dp[i] = min(dp[i - j*j] + 1) for all j where j*j <= i

// 这其实是完全背包问题的一种:
// 物品:完全平方数 1, 4, 9, 16, ...
// 背包容量:n
// 物品重量:平方数本身
// 物品价值:1(每个平方数算 1 个)
// 目标:用最少的物品填满背包

二叉树的层序遍历(复习)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left),
* right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> ans;
if (!root)
return ans;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
// 记录当前层的节点个数
int size = q.size();
vector<int> res; // 装当前层的节点 后续push到ans里面
while (size--) {
TreeNode* cur = q.front();
q.pop();
if (cur->left)
q.push(cur->left);
if (cur->right)
q.push(cur->right);
res.push_back(cur->val);
}
ans.emplace_back(res);
}
return ans;
}
};

今日工作内容

  1. 根因:CaptureScreen 中深度图裁剪条件要求 cropRect 必须存在,但 ImageCropPicker 不保证一定返回。cropRect 缺失时完整深度图直接用于已裁切图片,导致 mask 与深度图 FOV 不匹配,面积被系统性放大。修复:将判断条件改为基于图片宽高对比判断是否裁切;cropRect 缺失时用 deriveDepthCrop 推算居中裁切区域作为回退。
  2. 逐帧观看学习骏哥录制的webAi代码讲解视频
  3. 将webAi项目在本地跑起来

下阶段计划

  1. 继续优化App相关体验
  2. 继续熟悉webAi相关代码
  3. LeetCode 44.通配符匹配