【LeetCode 热题 100】二叉树 系列
📁 104. 二叉树的最大深度
深度就是树的高度,即只要左右子树其中有一个不为空,就继续往下递归,知道节点为空,向上返回。
int maxDepth(TreeNode* root) {if(root == nullptr)return 0;return max(maxDepth(root->left) , maxDepth(root->right)) + 1;}
📁 94. 二叉树的中序遍历
中序遍历就是先访问左子树,再访问根节点,最后访问右子树。
class Solution {
public:vector<int> ans;vector<int> inorderTraversal(TreeNode* root) {dfs(root); return ans;}void dfs(TreeNode* root){if(root == nullptr)return ;dfs(root->left);ans.push_back(root->val);dfs(root->right);}
};
📁 226. 翻转二叉树
对二叉树来一遍后序遍历,即先将左右子树翻转,保存反转后的左右子树的根节点,让root左右子树指针分别指向右子树,左子树。
TreeNode* invertTree(TreeNode* root) {if(root == nullptr)return root;TreeNode* left = invertTree(root->left);TreeNode* right = invertTree(root->right);root->right = left;root->left = right;return root;}
📁 101. 对称二叉树
求对称二叉树,我们只需要判断左右子树是否满足满足下面这些性质:1. 左右子树根节点相同;2. 左子树的右子树 = 右子树的的左子树;3. 左子树的左子树 = 右子树的右子树。
bool isSymmetric(TreeNode* root) {return isSameTree(root->left , root->right);}bool isSameTree(TreeNode* t1 , TreeNode* t2){if(t1 == nullptr && t2 == nullptr)return true;if(t1 == nullptr || t2 == nullptr)return false;if(t1->val != t2->val)return false;return isSameTree(t1->left , t2->right) && isSameTree(t1->right , t2->left);}
📁 543. 二叉树的直径
以某个节点为根节点,统计做左子树的最长路径,在统计右子树的最长路径,左右子树最长路径相加就是该二叉树的直径。
递归函数向上返回该二叉树的最长路径。
int ans = 0;int diameterOfBinaryTree(TreeNode* root) {depth(root);return ans;}int depth(TreeNode* root){if(root == nullptr)return 0;int left = depth(root->left);int right = depth(root->right);ans = max(ans , left + right);return max(left , right) + 1;}
📁 102. 二叉树的层序遍历
我们使用队列来完成二叉树的层序遍历,利用队列 [先入先出]的特性,将每一层的节点入队列,出队列按一层节点个数出队列。
如果出队列的每一个节点左右子树指针还有节点,在入队列,因为之前已经确定好了每一层节点个数,因此出队列时不回影响新入队列的节点。
vector<vector<int>> levelOrder(TreeNode* root) {if(root == nullptr)return vector<vector<int>>();vector<vector<int>> ret; queue<TreeNode*> q;q.push(root);while(!q.empty()){vector<int> tmp; //记录该层每一个节点的值int sz = q.size(); //记录该层的节点个数for(int i = 0 ; i < sz ; ++i){ TreeNode* node = q.front();q.pop();tmp.push_back(node->val);if(node->left)q.push(node->left);if(node->right)q.push(node->right);}ret.push_back(tmp);}return ret;}
📁 108. 将有序数组转换为二叉搜索树
二叉搜索树的特征就是,左子树所有节点的值都小于根节点的值,右子树所有节点的值都大于根节点的值;对二叉搜索树进行前序遍历得到的结果是一个有序数组。
对于本题,我们就可以采用二分+前序递归的方法,将中间值mid作为根节点,比mid小的放在左子树,比mid大的放在右子树。
TreeNode* dfs(vector<int>& nums , int left , int right){if(left > right)return nullptr;int mid = (left + right) >> 1;TreeNode* node = new TreeNode(nums[mid]);node->left = dfs(nums , left , mid - 1);node->right = dfs(nums , mid + 1 , right);return node;}TreeNode* sortedArrayToBST(vector<int>& nums) {return dfs(nums , 0 , nums.size() - 1);}
📁 98. 验证二叉搜索树
二叉搜索树的特征就是,左子树所有节点的值都小于根节点的值,右子树所有节点的值都大于根节点的值;对二叉搜索树进行前序遍历得到的结果是一个有序数组。
根绝二叉树性质我们可以知道,对二叉树进行前序遍历时,root节点的值一定大于上一个已经被遍历的节点值(左子树中最右节点)prev。
递归函数返回值为是否为二叉搜索树,先遍历左子树是否二叉搜索树,在判断根节点值是否大于prev,然后在判断右子树是否是二叉搜索树。
特殊情况:初始化prev值为最小值;如果是空间点nullptr,返回值为true。
long prev = LONG_MIN;bool dfs(TreeNode* root){if(root == nullptr)return true;bool left = dfs(root->left);if(!left)return false;if(root->val <= prev)return false;prev = root->val;bool right = dfs(root->right);return right;}bool isValidBST(TreeNode* root) {return dfs(root); }
📁 230. 二叉搜索树中第 K 小的元素
从左往右递归,即前序遍历,依次--k,知道找到k为0的节点,这就是第k小的元素节点。
class Solution {
public:int count = 1;int ret = 0;int kthSmallest(TreeNode* root, int k) {count = k;dfs(root);return ret; }void dfs(TreeNode* root){if(root == nullptr)return ;dfs(root->left);count--;if(count == 0){ret = root->val;return ;}dfs(root->right);}
};
📁 199. 二叉树的右视图
l利用BFS进行层序遍历,记录下来每一层的最后一个节点元素即可。
class Solution {
public:vector<int> ret;vector<int> rightSideView(TreeNode* root) {if(root == nullptr)return vector<int>();queue<TreeNode*> q;q.push(root);while(!q.empty()){int sz = q.size();for(int i = 0 ; i < sz; ++i){TreeNode* node = q.front(); q.pop();if(node->left)q.push(node->left);if(node->right)q.push(node->right);if(i == sz - 1)ret.push_back(node->val);}}return ret; }
};
📁 114. 二叉树展开为链表
判断左子树是否为空,如果为空,当前节点root不需要展开,已经展开为链表,处理当前节点的右子树。
如果不为空,需要找到左子树的最右节点作为右子树的根节点的前驱节点,当前节点root->left值为nullptr,右子树为左子树的根节点,处理完当前层后展开为链表,然后处理右子树。
class Solution {
public:void flatten(TreeNode* root) {TreeNode* cur = root;while(cur){if(cur->left){TreeNode* left = cur->left;TreeNode* prev = left;while(prev->right)prev = prev->right;prev->right = cur->right;cur->right = left;cur->left = nullptr;}cur = cur->right;}}
};
📁 105. 从前序与中序遍历序列构造二叉树
本题默认是所有值不重复
前序遍历的第一个节点一定是根节点,我们在中序遍历中查找根节点,即可找到左子树和右子树。
因此,递归遍历拿到prev中第一个节点一定是根节点,创建根节点,递归创建左子树根节点,在递归创建右子树根节点,直到数组中没有数据再能创建节点。
我们在中序遍历中找到根节点,就能知道左子树长度和右子树长度,我们采用空间换时间的方法,记录下来中序遍历中每个节点对应的下标。
class Solution {
public:unordered_map<int,int> index;TreeNode* myBuildTree(vector<int>& preorder, vector<int>& inorder , int prev_left , int prev_right,int in_left , int in_rihgt){if(prev_left > prev_right || in_left > in_rihgt)return nullptr;//记录前序遍历中root的下标 以及中序遍历中root的下标int in_root = index[preorder[prev_left]];//新建节点TreeNode* root = new TreeNode(preorder[prev_left]);//记录左子树的个数int sz = in_root - in_left;root->left = myBuildTree(preorder , inorder , prev_left + 1 , prev_left + sz, in_left , in_root - 1);root->right = myBuildTree(preorder , inorder , prev_left + 1 + sz , prev_right, in_root + 1 , in_rihgt);return root;}TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {int sz = preorder.size();for(int i = 0 ; i < sz ; ++i)index[inorder[i]] = i;return myBuildTree(preorder , inorder , 0 , sz - 1 , 0 , sz - 1);}
};
📁 437. 路径总和 III
我们采用前缀和的方法,从根节点开始,不断地往某一分支+root->val值为cur,如果满足公式:targetNum + ? = cur,如果 ? 存在,就表明上述公式成立,targetNum一定存在,ans += 齐前缀和为 ?的个数。
步骤:判断从当前节点往上是否满足公式,如果满足,ans += 前缀和为 ?的个数;在判断左右子树,即ans += 左右子树中满足公式的前缀和的个数。
class Solution {
public:unordered_map<long long , long long> hash;int pathSum(TreeNode* root, int targetSum) {hash[0] = 1;return dfs(root , 0 , targetSum);}int dfs(TreeNode* root , long long cur ,long long targetSum){if(root == nullptr)return 0;int ans = 0;cur += root->val;if(hash.find(cur - targetSum) != hash.end())ans += hash[cur - targetSum];hash[cur]++;ans += dfs(root->left , cur , targetSum);ans += dfs(root->right , cur , targetSum);hash[cur]--;return ans; }
};
📁 236. 二叉树的最近公共祖先
分为以下三种情况,递归查找p节点和q节点,如果找到向上返回,如果没有返回nullptr,分别查找左右子树。
1. 如果左右子树递归结果为空,说明没有找到p,q节点,返回nullptr。
2. 如果左子树为空,说明p和q节点在右子树中,p或q节点为另一个节点的最近公共祖先。
3. 右子树为空,同理可得。
4. 如果左右子树都不为空,说明此时,root为p和q的最近公共祖先。
class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == nullptr || root == p || root == q)return root;TreeNode* left = lowestCommonAncestor(root->left , p , q);TreeNode* right = lowestCommonAncestor(root->right , p , q);if(!left)return right;if(!right)return left;return root;}
};
📁 124. 二叉树中的最大路径和
本题,我们采用后序遍历的思路,先查找左子树中最大值的路径,最查找右子树中最大值的路径,然后+上根节点的值,记录下来最大值即可。
返回值为,从根节点开始,到左右子树中找到一条值最大的路径,向上返回该路径的值+根节点的值。
递归结束条件就是找到叶子节点,向上返回。
class Solution {
public:int ret = INT_MIN;int maxPathSum(TreeNode* root) {dfs(root);return ret; }int dfs(TreeNode* root){if(root == nullptr)return 0;int left = max(0 , dfs(root->left));int right = max(0 , dfs(root->right));ret = max(ret , root->val + left + right);return root->val + max(left , right);}
};
相关文章:
【LeetCode 热题 100】二叉树 系列
📁 104. 二叉树的最大深度 深度就是树的高度,即只要左右子树其中有一个不为空,就继续往下递归,知道节点为空,向上返回。 int maxDepth(TreeNode* root) {if(root nullptr)return 0;return max(maxDepth(root->lef…...
CTF之常见的文件头和文件尾
1、图片 JPEG 文件头:FF D8 FF 文件尾:FF D9TGA 未压缩的前4字节 00 00 02 00 RLE压缩的前5字节 00 00 10 00 00PNG 文件头:89 50 4E 47 0D 0A 1A 0A 文件尾:AE 42 60 82GIF 文件头:47 49 46 38 39(37) 61 文件尾&…...
软件设计师教程——第一章 计算机系统知识(上)
前言 在竞争激烈的就业市场中,证书是大学生求职的重要加分项。中级软件设计师证书专业性强、认可度高,是计算机相关专业学生考证的热门选择,既能检验专业知识,又有助于职业发展。本教程将聚焦核心重点,以点带面构建知…...
KRaft (Kafka 4.0) 集群配置指南(超简单,脱离 ZooKeeper 集群)还包含了简化测试指令的脚本!!!
docker-compose方式部署kafka集群 Kafka 4.0 引入了 KRaft 模式(Kafka Raft Metadata Mode),它使 Kafka 集群不再依赖 ZooKeeper 进行元数据管理。KRaft 模式简化了 Kafka 部署和管理,不需要额外配置 ZooKeeper 服务,…...
安全月演讲比赛活动讲话稿
同志们:在公司上下万众一心创建“无违章企业”的大形势下,由公司工会、团委举办的“安全与我”演讲比赛,经过紧张激烈的预赛,今天进行正式决赛。 从预赛的38名选手中脱颖而出的10名选手,今天将再次登台献技,…...
实时操作系统:航空电子系统的安全基石还是创新枷锁?
引言:航空电子系统的进化论 在航空电子技术的漫长发展历程中,飞行器控制系统实现从机械仪表到数字计算机的跨越,这一进步具有深远意义。现代战机以超过 2 马赫的速度突破音障,无人机群在复杂电磁环境下完成自主编队,这…...
windows 部署 Kafka3.x KRaft 模式 不依赖 ZooKeeper
1.下载 https://archive.apache.org/dist/kafka/3.9.0/kafka_2.12-3.9.0.tgz2.配置使用 KRaft 模式 2.1 修改 Kafka 的配置文件 cd D:\data\bigdata\kafka_2.12-3.9.0\config\kraft 修改 server.properties # 设置 Kafka 数据日志存储目录 log.dirsD:\\data\\bigdata\\kaf…...
SEMI E40-0200 STANDARD FOR PROCESSING MANAGEMENT(加工管理标准)-(一)
1 目的 物料(例如晶圆)加工在设备中的自动化管理与控制是实现工厂自动化的关键要素。本标准针对半导体制造环境中与设备内部物料处理相关的通信需求进行了规范。本标准规定了在加工单元接收到的指定材料所应适用的加工方法(例如Etch腔室需要Run哪支Recipe)。它阐述了物料加工的…...
Web 架构之高可用基础
文章目录 引言一、无状态服务设计(Session 托管至 Redis 集群)1. 概念与原理2. 代码示例(Python Flask 应用)3. 常见问题及解决办法 二、数据库读写分离(MySQL 主从 ProxySQL 流量分发)1. 概念与原理2. 配…...
巧用python之--模仿PLC(PLC模拟器)
工作中用到了VM(VisionMaster4.3)有时候需要和PLC打交道,但是PLC毕竟是别人的,不方便修改别人的程序,这时候需要一个灵活的PLC模拟器是多么好呀! 先说背景: PLC型号 汇川Easy521: Modbus TCP 192.168.1.10:502 在汇川Easy521中Modbus保持寄存器D寄存器 ,在modbus协议中 0-4区…...
Nginx +Nginx-http-flv-module 推流拉流
这两天为了利用云服务器实现 Nginx 进行OBS Rtmp推流,Flv拉流时发生了诸多情况,记录实现过程。 环境 OS:阿里云CentOS 7.9 64位Nginx:nginx-1.28.0Nginx-http-flv-module:nginx-http-flv-module-1.2.12 安装Nginx编…...
DRF+Vue项目线上部署:腾讯云+Centos7.6
1.服务器选购和配置 1.1.服务器选购 1.2.防火墙/安全组配置 80是HTTP的端口,443是HTTPS的端口,22是远程连接的端口,3306是mysql的端口。 1.3.远程连接软件(tabby)配置 下载:https://github.com/Eugeny/ta…...
大疆无人机(全系列,包括mini)拉流至电脑,实现直播
参考视频 【保姆级教程】大疆无人机rtmp推流直播教程_哔哩哔哩_bilibili VLC使用教程: VLC工具使用指南-CSDN博客 目录 实现效果: 电脑端 编辑 编辑 无人机端 VLC拉流 分析 实现效果: (实验机型:大疆mini4kRC-N2遥控器、大…...
Spring普通配置类 vs 自动配置类-笔记
1.简要版 Configuration和Bean,既可以用于普通配置类,也可以用于自动配置类。二者的区别和联系是什么呢? 区别: Configuration和Bean是Spring框架本身的注解,用于定义配置类和生成Bean。而自动配置通常是Spring Boo…...
解决Ceph 14.2.22 Nautilus版本监视器慢操作问题的实践指南
解决Ceph Nautilus版本监视器慢操作问题的实践指南 问题背景问题现象问题分析1. 确认监视器状态2. 检查慢操作详情3. 深入分析操作状态 问题原因解决方案立即解决方法 总结 在生产环境中执行任何操作前,请确保已备份重要数据,并在测试环境中验证解决方案…...
Go使用Gin写一个对MySQL的增删改查服务
首先用SQL创建一个包含id、name属性的users表 create table users (id int auto_incrementprimary key,name varchar(255) null );查询所有用户信息: func queryData(db *sql.DB, w http.ResponseWriter) {rows, err : db.Query("SELECT * FROM users"…...
数字孪生医疗:构建患者特异性数字孪生体路径探析
引言 数字孪生技术正逐渐成为医疗健康领域的一场革命性力量,它通过创建人体器官和系统的数字复制品,为疾病预测、诊断和个性化治疗开辟了前所未有的可能性。在心血管疾病领域,数字孪生技术的应用尤为引人注目,特别是对于扩张型心肌病(Dilated Cardiomyopathy,DCM)这一常…...
rust程序静态编译的两种方法总结
1. 概述 经过我的探索,总结了两种rust程序静态编译的方法,理论上两种方法都适用于windows、mac os和linux(mac os未验证),实测方法一性能比方法二好,现总结如下,希望能够帮到你. 2.方法一 2.1 添加配置文件 在项目的同级文件夹下新…...
threejs 添加css3d标签 vue3
如图所示,给收费站标注标签。步骤如下: 一、引入 import {CSS3DRenderer,CSS3DObject, } from "three/examples/jsm/renderers/CSS3DRenderer"; 二、 //一、申明css3渲染器 const label3DRenderer ref()//二、创建css3d渲染器--将渲染器加…...
【git】git fsmonitor
git fsmonitor 是 Git 提供的一个特性,用于提高 Git 的性能,尤其是在处理文件状态检查(git status)时。它通过文件系统监控服务(如 Windows 上的 FileSystemWatcher 或 Linux 上的 inotify)来跟踪文件系统的…...
开源照片管理系统PhotoPrism的容器化部署与远程管理配置
文章目录 前言1.关于PhotoPrism2.本地部署PhotoPrism3.PhotoPrism简单使用4. 安装内网穿透5.配置PhotoPrism公网地址6. 配置固定公网地址 前言 你是不是用手机拍照片的时候无所谓拍了多少张,但在整理的时候却要占用超多时间?别怕,今天给大家…...
macOS Python 环境配置指南
1. 检查现有 Python 环境 python3 --version # 检查 Python 3 版本 pip3 --version # 检查 pip 版本 2. 安装 pyenv(Python 版本管理工具) # 使用 Homebrew 安装 pyenvbrew install pyenv# 配置 pyenv 环境变量(添加到 ~/.zshrc&#…...
如何阅读、学习 Git 核心源代码 ?
学习 Git 核心源代码是一个深入理解版本控制系统底层原理的绝佳方式。以下是分阶段的系统性建议,结合了实践经验和学习路径设计: 一、前置知识储备 C语言进阶 重点掌握指针操作(尤其是二级指针和函数指针)结构体嵌套与内存对齐…...
学习黑客 MAC 地址深入了解
在江湖之中,每位少侠既有“门派”加身,也需持有“令牌”通行。MAC地址便是我被师门铁订在骨血里的“先天武功心法”,铸于出厂之时,终身不变,只有破阵高手才能暗度陈仓才能改写;而IP地址则是我行走江湖的“后…...
长事务:数据库中的“隐形炸弹“——金仓数据库运维避坑指南
引言:凌晨三点的告警 "张工!生产库又告警了!"凌晨三点的电话铃声总是格外刺耳。运维团队发现数据库频繁进入单用户模式,排查发现某核心表的年龄值(Age)已突破20亿大关。经过一夜奋战,…...
WTK6900C-48L:离线语音芯片重构玩具DNA,从“按键操控”到“声控陪伴”的交互跃迁
一:开发背景 随着消费升级和AI技术进步,传统玩具的机械式互动已难以满足市场需求。语音控制芯片的引入使玩具实现了从被动玩耍到智能交互的跨越式发展。通过集成高性价比的语音识别芯片,现代智能玩具不仅能精准响应儿童指令,还能实…...
一文读懂Python之requests模块(36)
一、requests模块简介 requests模块是python中原生的一款基于网络请求的模块,功能强大,简单便捷且高效 ,该模块可以模拟浏览器发送请求,主要包括指定url、发起请求、获取响应数据和持久化存储,包括 GET、POST、PUT、…...
Java 异常
Java 异常的体系结构 java.lang.Throwable ├── Error(严重错误,程序无法处理) │ ├── OutOfMemoryError │ ├── StackOverflowError │ └── ... └── Exception(程序可以处理的异常)├── Check…...
智能外呼机器人的核心优势
随着人工智能技术的快速发展,智能外呼机器人已成为企业降本增效的重要工具。其通过整合语音识别(ASR)、自然语言处理(NLP)、语音合成(TTS)等技术,不仅替代了大量重复性人工劳动&…...
n8n - 开放灵活的智能自动化工作流平台
n8n - 开放灵活的智能自动化工作流平台 在当今数字化转型的大潮中,自动化已成为众多企业提升效率、优化流程的关键手段。而在众多自动化工具中,n8n以其开放灵活且强大的功能脱颖而出,成为技术团队的可靠选择。今天,我们将深入了解n8n这个开源自动化工作流平台,探索其广泛…...
window 显示驱动开发-处理内存段(二)
KMD 不需要在其内存段中指定 GPU 可用的所有视频内存资源。 但是,KMD 必须指定 VidMm 在系统上运行的所有进程中管理的所有内存资源。 例如: 实现固定函数管道的顶点着色器微代码可以驻留在 GPU 地址空间中,但在 VidMm 管理的内存之外&#x…...
RSS 2025|斯坦福提出「统一视频行动模型UVA」:实现机器人高精度动作推理
导读 在机器人领域,让机器人像人类一样理解视觉信息并做出精准行动,一直是科研人员努力的方向。今天,我们要探讨的统一视频行动模型(Unified Video Action Model,UVA),就像给机器人装上了一个“…...
代码随想录算法训练营第60期第三十天打卡
大家好,今天我们要走进一个全新的章节,这一章叫做贪心算法,前面我们讲的是回溯算法,那究竟什么是贪心算法呢?我们一起走进今天的内容。 第一部分贪心的理论基础 其实大家看这个名字估计也会有一定了解,贪心…...
腾讯云:数字世界的“量子熔炉”与硅基文明引擎
一、算力拓扑学:重新定义空间的计算密度 腾讯云的算力网络正在突破经典物理限制,其分布式架构通过“量子化”资源调度实现超维计算: 虚拟化跃迁:基于KVM的轻量级虚拟化技术,将单台物理服务器切割为百…...
Python Cookbook-7.7 通过 shelve 修改对象
任务 你正在使用标准库模块shelve。你用shelve处理过的一些值是易变的对象(mutableobjects),而且你需要修改这些对象。 解决方案 shelve 模块提供了一种持久的字典——在强大的关系型数据库和简洁的 marshal、pickledbm 以及类似的文件格式之间,它有着…...
Baklib构建AI就绪知识管理体系
Baklib构建AI就绪知识体系 在数字化转型加速的背景下,Baklib通过其AI就绪知识管理体系,为企业提供了从数据整合到智能应用的完整解决方案。该平台以知识中台为核心架构,依托自然语言处理与机器学习技术,对分散在企业文档系统、协…...
嵌入式开发学习日志Day16
一、指针函数 函数的返回值为指针的函数; 注意:不能返回局部变量的地址; 可以返回静态变量的地址; 可以返回全局变量的地址; 1、动态内存分配 void *malloc(size_t size); //申请空间的函数 void free(*ptr); …...
SLAM文献之KernelGPA: A Globally Optimal Solution to Deformable SLAM in Closed-form
KernelGPA: A Globally Optimal Solution to Deformable SLAM in Closed-form 提出了一种在非刚性变形环境下求解 SLAM 问题的闭式全局最优解方法。下面是对其算法原理和核心推导过程的系统解析。 一、算法背景与目标 问题描述: 传统 SLAM 主要假设环境为刚性&am…...
C++之“继承”
继续开始关于C相关的内容。C作为面向对象的语言,有三大特性:封装,继承,多态。 这篇文章我们开始学习:继承。 一、继承的概念和定义 1. 继承的概念 什么是继承呢? 字面意思理解来看:继承就是…...
java集成telegram机器人
java集成telegram机器人 最近项目需要集成telegram机器人,来实现消息推送功能,以此记录下。 1.创建telegram账号 没有账号的可以去某宝上买一个,千万不要用自己的手机号86去注册,你懂得。 2. 打开BotFather对话创建机器人获取…...
从代码学习深度学习 - 单发多框检测(SSD)PyTorch版
文章目录 前言工具函数数据处理工具 (`utils_for_data.py`)训练工具 (`utils_for_train.py`)检测相关工具 (`utils_for_detection.py`)可视化工具 (`utils_for_huitu.py`)模型类别预测层边界框预测层连接多尺度预测高和宽减半块基础网络块完整的模型训练模型读取数据集和初始化…...
因子分析——数学原理及R语言代码
这里写自定义目录标题 因子分析参数估计方法主成分法主因子法 因子旋转 代码实现Reference 因子分析 FactorAnalysis的目的是从多个高度相关的观测变量中提取出少数几个LatentFactor,这些因子代表了变量背后的共通结构,从而实现降维并提升可解释性。 假…...
CSS3 过渡与动画
在现代网页设计中,平滑的过渡和生动的动画效果已成为提升用户体验不可或缺的元素。CSS3 为我们提供了强大的 transition 和 animation 属性,让开发者能够轻松实现各种视觉效果。本文将深入探讨这两大功能的特性和应用场景。 一、CSS3 过渡(T…...
【JAVA】【重试间隔】多线程中两种常见的重试间隔
一、前言 报!! 小南啊,今日有个小任务交给你去办。就是程序中有个数据处理,总是会出错,不知道是什么原因,你去处理一下! 二、主题 围绕数据处理问题去看,从中发现,是因为…...
在现代Web应用中集成 PDF.js (pdfjs-dist 5.2 ESM): 通过 jsdelivr 实现动态加载与批注功能的思考
PDF 文档在现代 Web 应用中越来越常见,无论是作为文档预览、报告展示还是在线编辑的载体。Mozilla 的 PDF.js 是一个功能强大的 JavaScript 库,它使得在浏览器端渲染和显示 PDF 文件成为可能,无需依赖原生插件。 本文将深入探讨如何在你的项…...
android ViewModel liveData无法监听之多线程下activityViewModels不安全
我们一般的,会遇到liveData无法监听到结果,可能存在主要2种可能: liveData没有正确注册;liveData连续多次设置值,中间的值,会被丢弃,但最后一次是能监听到的。 但是我们容易忽略一种case&…...
【即插即用涨点模块】DSConv动态蛇形卷积:自适应聚焦细长弯曲的局部结构特征,助力分割高效提点【附源码+注释】
《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...
守护数字家园:个人博客安全防护指南
前言 在之前的文章《WordPress个人博客搭建(一)》《WordPress个人博客搭建(二)》《WordPress个人博客搭建(三)》中,我们已经在非凡云云服务器上,借助1Panel搭建起属于自己的数字庭院…...
课外活动:简单了解原生测试框架Unittest前置后置的逻辑
简单了解原生测试框架Unittest前置后置的逻辑 一、测试框架执行顺序解析 1.1 基础执行流程 import unittestclass A(unittest.TestCase):classmethoddef setUpClass(cls):print(f"【CLASS START】{cls.__name__}")def setUp(self):print(f"【TEST START】{se…...
带你玩转 Flink TumblingWindow:从理论到代码的深度探索
0.前言 在深入探讨 TumblingWindow 之前,我们先来了解一下流处理或流计算中“窗口”的基本概念。在数据流中,源会持续不断地生成数据,因此计算最终值是不可行的。 在大多数用例中,为了获取有意义的信息,最好使用两种方…...