news 2025/12/29 22:30:54

vector<int> dfs

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
vector<int> dfs

lc3593

自底向上dfs

max dfs

cnt not need change子树

class Solution {
public:
int minIncrease(int n, vector<vector<int>>& edges, vector<int>& cost)

{
vector<vector<int>> g(n);
for (auto& e : edges) {
int x = e[0], y = e[1];
g[x].push_back(y);
g[y].push_back(x);
}
g[0].push_back(-1);

int ans = 0;
auto dfs = [&](this auto&& dfs, int x, int fa) -> long long {
long long max_s = 0;
int cnt = 0;
for (int y : g[x]) {
if (y == fa)
continue;

long long mx = dfs(y, x);
if (mx > max_s) {
max_s = mx;
cnt = 1;
}else if (mx == max_s)
cnt++;
}
ans += g[x].size() - 1 - cnt;//子树-fa-not need change

return max_s + cost[x];
};
dfs(0, -1);
return ans;
}
};

lc1519

vector<int> dfs

class Solution {
public:
vector<int> countSubTrees(int n, vector<vector<int>>& edges, string labels) {
vector<int> res(n, 0);
vector<vector<int>> g(n);
for(auto& e : edges) {
g[e[0]].push_back(e[1]);
g[e[1]].push_back(e[0]);
}
auto dfs = [&](this auto&& dfs,int u, int p)-> vector<int>
{
vector<int> cnt(26, 0);//cur
cnt[labels[u] - 'a']++;

for(int v : g[u]) {
if(v == p) continue;
vector<int> c = dfs(v, u);


for(int i = 0; i < 26; i++)
cnt[i] += c[i];
//拿到的每个v 都加给cur
}
res[u] = cnt[labels[u] - 'a'];
//统计完v后 存入ret

return cnt;
};
dfs(0, -1);// cur,fa
return res;
}
};

lc3254

统计连续上升的元素长度,用一次遍历判断每个长度为k的子数组是否连续上升 借助cnt变量

满足则记录末尾元素为能量值,否则保持-1

class Solution {
public:
vector<int> resultsArray(vector<int>& nums, int k) {
vector<int> ans(nums.size() - k + 1, -1);
int cnt = 0;
for (int i = 0; i < nums.size(); i++) {
cnt = i == 0 || nums[i] == nums[i - 1] + 1 ? cnt + 1 : 1;
if (cnt >= k)
ans[i - k + 1] = nums[i];
}
return ans;
}
};

lc957

模拟+周期+hash

模拟每天牢房状态变化+检测循环周期

高效计算出 n 天后的牢房状态,避免了大数 n 的重复模拟

class Solution {
public:
vector<int> prisonAfterNDays(vector<int>& cells, int n) {
unordered_map<int, vector<int>> map; //key:第i天 value:cells状态
map.insert({0, cells});


for (int i = 1; i <= n; i++) {
if (i == 1) {
cells[0] = 0;
cells[7] = 0;
}
for (int j = 1; j < 7; j++) {
if (map[i - 1][j - 1] == 0 && map[i - 1][j + 1] == 0) cells[j] = 1;
else if (map[i - 1][j - 1] == 1 && map[i - 1][j + 1] == 1) cells[j] = 1;
else cells[j] = 0;
}
map.insert({i, cells});
bool flag = true;// 判循环


for (int j = 0; j < 8; j++)
if (cells[j] != map[1][j]) flag = false;

if (i > 1 && flag) {
if (n % (i - 1) == 0) return map[i - 1]; //能整除则返回上一天的状态(余数为0)
else return map[n % (i - 1)];

//不能整除时返回第 n % (i - 1) 的状态
}
}
return cells;

//没出现循环直接返回模拟的结果
}
};

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/29 22:30:37

应用——Linux Socket编程

Linux Socket编程TCP服务器编程模型基本流程// 1. 创建监听socket int listfd socket(AF_INET, SOCK_STREAM, 0);// 2. 绑定地址和端口 struct sockaddr_in ser; ser.sin_family AF_INET; ser.sin_port htons(50000); ser.sin_addr.s_addr INADDR_ANY; bind(listfd, (SA)&a…

作者头像 李华
网站建设 2025/12/29 22:30:09

diskinfo命令行工具使用:分析GPU服务器磁盘I/O瓶颈

diskinfo命令行工具使用&#xff1a;分析GPU服务器磁盘I/O瓶颈 在现代AI训练集群中&#xff0c;一块价值数万元的GPU卡可能正因几块老旧SSD而“饥饿”停摆。这种现象并不罕见——当ResNet-50模型每轮训练耗时从25分钟飙升至45分钟&#xff0c;nvidia-smi显示GPU利用率长期徘徊在…

作者头像 李华
网站建设 2025/12/29 22:28:30

HuggingFace Dataset流式加载:处理超大规模token数据集

HuggingFace Dataset流式加载&#xff1a;处理超大规模token数据集 在训练百亿参数语言模型时&#xff0c;你是否曾因加载一个TB级语料库而遭遇内存崩溃&#xff1f;或者花费数小时等待数据预处理完成&#xff0c;结果GPU却闲置了大半时间&#xff1f;这并非个例。随着LLM进入“…

作者头像 李华
网站建设 2025/12/29 22:26:54

YOLOv5s模型转ONNX格式:借助PyTorch-CUDA完成导出

YOLOv5s模型转ONNX格式&#xff1a;借助PyTorch-CUDA完成导出 在现代AI部署流程中&#xff0c;一个训练好的深度学习模型往往不能直接“上线”。尤其是在目标检测这类对实时性要求极高的场景下&#xff0c;从实验室的 .pt 文件到边缘设备上的高效推理引擎之间&#xff0c;横亘…

作者头像 李华
网站建设 2025/12/29 22:25:20

CNN图像分类实战:基于PyTorch-CUDA-v2.8的端到端训练

CNN图像分类实战&#xff1a;基于PyTorch-CUDA-v2.8的端到端训练 你有没有经历过这样的场景&#xff1f;明明买了一块RTX 3090显卡&#xff0c;满怀期待地跑起CNN模型&#xff0c;结果发现训练速度还没隔壁用笔记本的同学快——一查才发现&#xff0c;模型压根没上GPU&#xff…

作者头像 李华
网站建设 2025/12/29 22:24:34

Git下载大型模型权重文件失败?教你用git-lfs和镜像加速解决

Git下载大型模型权重文件失败&#xff1f;教你用git-lfs和镜像加速解决 在尝试克隆一个Hugging Face上的LLaMA-2适配模型仓库时&#xff0c;你是否曾经历过这样的场景&#xff1a;git clone 命令执行到一半卡住、内存爆满、最终报错“fatal: the remote end hung up unexpected…

作者头像 李华