【C++BFS算法 二分查找】2812. 找出最安全路径
本文涉及知识点
C++BFS算法
C++二分查找
LeetCode2812. 找出最安全路径
给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid ,其中 (r, c) 表示:
如果 grid[r][c] = 1 ,则表示一个存在小偷的单元格
如果 grid[r][c] = 0 ,则表示一个空单元格
你最开始位于单元格 (0, 0) 。在一步移动中,你可以移动到矩阵中的任一相邻单元格,包括存在小偷的单元格。
矩阵中路径的 安全系数 定义为:从路径中任一单元格到矩阵中任一小偷所在单元格的 最小 曼哈顿距离。
返回所有通向单元格 (n - 1, n - 1) 的路径中的 最大安全系数 。
单元格 (r, c) 的某个 相邻 单元格,是指在矩阵中存在的 (r, c + 1)、(r, c - 1)、(r + 1, c) 和 (r - 1, c) 之一。
两个单元格 (a, b) 和 (x, y) 之间的 曼哈顿距离 等于 | a - x | + | b - y | ,其中 |val| 表示 val 的绝对值。
示例 1:
输入:grid = [[1,0,0],[0,0,0],[0,0,1]]
输出:0
解释:从 (0, 0) 到 (n - 1, n - 1) 的每条路径都经过存在小偷的单元格 (0, 0) 和 (n - 1, n - 1) 。
示例 2:
输入:grid = [[0,0,1],[0,0,0],[0,0,0]]
输出:2
解释:
上图所示路径的安全系数为 2:
- 该路径上距离小偷所在单元格(0,2)最近的单元格是(0,0)。它们之间的曼哈顿距离为 | 0 - 0 | + | 0 - 2 | = 2 。
可以证明,不存在安全系数更高的其他路径。
示例 3:
输入:grid = [[0,0,0,1],[0,0,0,0],[0,0,0,0],[1,0,0,0]]
输出:2
解释:
上图所示路径的安全系数为 2:
- 该路径上距离小偷所在单元格(0,3)最近的单元格是(1,2)。它们之间的曼哈顿距离为 | 0 - 1 | + | 3 - 2 | = 2 。
- 该路径上距离小偷所在单元格(3,0)最近的单元格是(3,2)。它们之间的曼哈顿距离为 | 3 - 3 | + | 0 - 2 | = 2 。
可以证明,不存在安全系数更高的其他路径。
提示:
1 <= grid.length == n <= 400
grid[i].length == n
grid[i][j] 为 0 或 1
grid 至少存在一个小偷
二分查找
一,BFS出各单格距离小偷的位置(层次)leve。
二,二分查找。Check(mid) 是否存在安全系数为mid或更大的路径。随着mid从0到leve[0][0],Check的返回值逐步由true,变成false。我们寻找最后一个true。Check函数的大致步骤:
a,连通距离小偷大于等与mid的单格。
b,看右下角的层次是否大于等于0。
代码
第一版(超时)
class CGrid {
public:CGrid(int rCount, int cCount) :m_r(rCount), m_c(cCount) {}vector<vector<pair<int, int>>> NeiBo(std::function<bool(int, int)> funVilidCur, std::function<bool(int, int)> funVilidNext, int iConnect = 4){vector<vector<pair<int, int>>> vNeiBo(m_r * m_c);auto Move = [&](int preR, int preC, int r, int c){if ((r < 0) || (r >= m_r)){return;}if ((c < 0) || (c >= m_c)){return;}if (funVilidCur(preR, preC) && funVilidNext(r, c)){vNeiBo[Mask(preR, preC)].emplace_back(r, c);}};for (int r = 0; r < m_r; r++){for (int c = 0; c < m_c; c++){for (int k = 0; k < iConnect; k++){Move(r, c, r + s_Moves[k][0], c + s_Moves[k][1]);}}}return vNeiBo;}void EnumGrid(std::function<void(int, int)> call){for (int r = 0; r < m_r; r++){for (int c = 0; c < m_c; c++){call(r, c);}}} vector<pair<int, int>> GetPos(std::function<bool(int, int)> fun) {vector<pair<int, int>> ret;for (int r = 0; r < m_r; r++){for (int c = 0; c < m_c; c++){if (fun(r, c)) {ret.emplace_back(r, c);}}}return ret;}inline int Mask(int r, int c) { return m_c * r + c; }const int m_r, m_c;const inline static int s_Moves[][2] = { {1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1} };
};class CBFSLeve {
public :static vector<int> Leve(const vector<vector<int>>& neiBo, vector<int> start) {vector<int> leves(neiBo.size(), -1);for (const auto& s : start) {leves[s] = 0;}for (int i = 0; i < start.size(); i++) {for (const auto& next : neiBo[start[i]]) {if (-1 != leves[next]) { continue; }leves[next] = leves[start[i]]+1;start.emplace_back(next);}}return leves;}static vector<vector<int>> Leve(CGrid& grid, vector<pair<int, int>> start, std::function<bool(int, int)> funVilidCur, std::function<bool(int, int)> funVilidNext, int iConnect = 4 ) {auto neiBo = grid.NeiBo(funVilidCur, funVilidCur, iConnect);vector<vector<int>> leves(grid.m_r, vector<int>(grid.m_c, -1));for (const auto& [r,c] : start) {leves[r][c] = 0;}for (int i = 0; i < start.size(); i++) {const int iMask = grid.Mask(start[i].first, start[i].second);for (const auto& [r1,c1] : neiBo[iMask]) {if (-1 != leves[r1][c1]) { continue; }leves[r1][c1] = leves[start[i].first][start[i].second] + 1;start.emplace_back(r1,c1);}}return leves;}
};template<class INDEX_TYPE>
class CBinarySearch
{
public:CBinarySearch(INDEX_TYPE iMinIndex, INDEX_TYPE iMaxIndex):m_iMin(iMinIndex),m_iMax(iMaxIndex) {}template<class _Pr>INDEX_TYPE FindFrist( _Pr pr){auto left = m_iMin - 1;auto rightInclue = m_iMax;while (rightInclue - left > 1){const auto mid = left + (rightInclue - left) / 2;if (pr(mid)){rightInclue = mid;}else{left = mid;}}return rightInclue;}template<class _Pr>INDEX_TYPE FindEnd( _Pr pr){int leftInclude = m_iMin;int right = m_iMax + 1;while (right - leftInclude > 1){const auto mid = leftInclude + (right - leftInclude) / 2;if (pr(mid)){leftInclude = mid;}else{right = mid;}}return leftInclude;}
protected:const INDEX_TYPE m_iMin, m_iMax;
};class Solution {public:int maximumSafenessFactor(vector<vector<int>>& grid) {CGrid ng(grid.size(),grid[0].size());auto start = ng.GetPos([&](int r, int c) {return grid[r][c] == 1; });auto vilid = [&](int r, int c) {return true; };auto leve = CBFSLeve::Leve(ng, start,vilid, vilid);auto Check = [&](int mid) {auto vilid1 = [&](int r, int c) {return leve[r][c] >= mid; };auto leve1 = CBFSLeve::Leve(ng, { {0,0 } }, vilid1, vilid1);return leve1.back().back() >= 0;};CBinarySearch<int> bs(0, leve[0][0]);return bs.FindEnd(Check);}};
第二版
中间过程,求临接表浪费很多时间,省略后,速度提高几倍。就可以过了。许多单格和起点不连通,无需计算。
class CGrid {
public:CGrid(int rCount, int cCount) :m_r(rCount), m_c(cCount) {}template<class Fun1,class Fun2>vector<vector<pair<int, int>>> NeiBo(Fun1 funVilidCur, Fun2 funVilidNext, int iConnect = 4){vector<vector<pair<int, int>>> vNeiBo(m_r * m_c);for (int r = 0; r < m_r; r++){for (int c = 0; c < m_c; c++){if (!funVilidCur(r, c))continue;auto& v = vNeiBo[Mask(r, c)];if ((r > 0)&& funVilidNext(r-1, c)) {v.emplace_back(r-1, c);}if ((c > 0) && funVilidNext(r , c - 1)) {v.emplace_back(r, c - 1);}if ((r+1 < m_r ) && funVilidNext(r + 1, c)) {v.emplace_back(r + 1, c);}if ((c+1 <m_c ) && funVilidNext(r, c + 1)) {v.emplace_back(r, c + 1);}}}return vNeiBo;}void EnumGrid(std::function<void(int, int)> call){for (int r = 0; r < m_r; r++){for (int c = 0; c < m_c; c++){call(r, c);}}} vector<pair<int, int>> GetPos(std::function<bool(int, int)> fun) {vector<pair<int, int>> ret;for (int r = 0; r < m_r; r++){for (int c = 0; c < m_c; c++){if (fun(r, c)) {ret.emplace_back(r, c);}}}return ret;}inline int Mask(int r, int c) { return m_c * r + c; }const int m_r, m_c;const inline static int s_Moves[][2] = { {1,0},{-1,0},{0,1},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1} };
};class CBFSLeve {
public :static vector<int> Leve(const vector<vector<int>>& neiBo, vector<int> start) {vector<int> leves(neiBo.size(), -1);for (const auto& s : start) {leves[s] = 0;}for (int i = 0; i < start.size(); i++) {for (const auto& next : neiBo[start[i]]) {if (-1 != leves[next]) { continue; }leves[next] = leves[start[i]]+1;start.emplace_back(next);}}return leves;}static vector<vector<int>> Dis(CGrid& grid, vector<pair<int, int>> start, std::function<bool(int, int)> funVilidCur, std::function<bool(int, int)> funVilidNext, const int& iConnect = 4 ) {static short dir[8][2] = { {0, 1}, {1, 0}, {-1, 0},{ 0, -1},{1,1},{1,-1},{-1,1},{-1,-1} };vector<vector<int>> vDis(grid.m_r, vector<int>(grid.m_c, -1));for (const auto& [r,c] : start) {vDis[r][c] = 0;}for (int i = 0; i < start.size(); i++) {const auto [r,c] = start[i];if (!funVilidCur(r, c)) { continue; }for (int k = 0; k < iConnect; k++) {const int r1 = r + dir[k][0];const int c1 = c + dir[k][1];if ((r1 < 0) || (r1 >= grid.m_r) || (c1 < 0) || (c1 >= grid.m_c)) { continue; }if (funVilidNext(r1, c1)&&(-1 == vDis[r1][c1])) {start.emplace_back(r1, c1);vDis[r1][c1]= vDis[r][c] + 1;}}}return vDis;}
};template<class INDEX_TYPE>
class CBinarySearch
{
public:CBinarySearch(INDEX_TYPE iMinIndex, INDEX_TYPE iMaxIndex):m_iMin(iMinIndex),m_iMax(iMaxIndex) {}template<class _Pr>INDEX_TYPE FindFrist( _Pr pr){auto left = m_iMin - 1;auto rightInclue = m_iMax;while (rightInclue - left > 1){const auto mid = left + (rightInclue - left) / 2;if (pr(mid)){rightInclue = mid;}else{left = mid;}}return rightInclue;}template<class _Pr>INDEX_TYPE FindEnd( _Pr pr){int leftInclude = m_iMin;int right = m_iMax + 1;while (right - leftInclude > 1){const auto mid = leftInclude + (right - leftInclude) / 2;if (pr(mid)){leftInclude = mid;}else{right = mid;}}return leftInclude;}
protected:const INDEX_TYPE m_iMin, m_iMax;
};class Solution {public:int maximumSafenessFactor(vector<vector<int>>& grid) {CGrid ng(grid.size(),grid[0].size()); auto start = ng.GetPos([&](int r, int c) {return grid[r][c] == 1; });auto vilid = [&](int r, int c) {return true; };auto dis = CBFSLeve::Dis(ng, start,vilid, vilid);auto Check = [&](int mid) {auto vilid1 = [&](int r, int c) {return dis[r][c] >= mid; };auto dis2 = CBFSLeve::Dis(ng, { {0,0} }, vilid1, vilid1);return dis2.back().back() >= 0;};CBinarySearch<int> bs(0, min(dis[0][0],dis.back().back()));return bs.FindEnd(Check);}};
单元测试
vector<vector<int>> grid;TEST_METHOD(TestMethod1){grid = { {1} };auto res = Solution().maximumSafenessFactor(grid);AssertEx(0, res);}TEST_METHOD(TestMethod15){grid = { {1,0,0},{0,0,0},{0,0,1} };auto res = Solution().maximumSafenessFactor(grid);AssertEx(0, res);}TEST_METHOD(TestMethod16){grid = { {0,0,1},{0,0,0},{0,0,0} };auto res = Solution().maximumSafenessFactor(grid);AssertEx(2, res);}TEST_METHOD(TestMethod17){grid = { {0,0,0,1},{0,0,0,0},{0,0,0,0},{1,0,0,0} };auto res = Solution().maximumSafenessFactor(grid);AssertEx(2, res);}TEST_METHOD(TestMethod18){grid.assign(400, vector<int>(400));grid[0][0] = 1;auto res = Solution().maximumSafenessFactor(grid);AssertEx(0, res);}TEST_METHOD(TestMethod19){grid.assign(400, vector<int>(400));grid.back().back() = 1;auto res = Solution().maximumSafenessFactor(grid);AssertEx(0, res);}TEST_METHOD(TestMethod20){grid.assign(400, vector<int>(400));grid[0].back() = 1;auto res = Solution().maximumSafenessFactor(grid);AssertEx(399, res);}TEST_METHOD(TestMethod21){grid.assign(400, vector<int>(400));grid.back()[0] = 1;auto res = Solution().maximumSafenessFactor(grid);AssertEx(399, res);}
扩展阅读
我想对大家说的话 |
---|
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。 |
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作 |
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注 |
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。 |
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。 |
如果程序是一条龙,那算法就是他的是睛 |
失败+反思=成功 成功+反思=成功 |
视频课程
先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176
测试环境
操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。
相关文章:
【C++BFS算法 二分查找】2812. 找出最安全路径
本文涉及知识点 CBFS算法 C二分查找 LeetCode2812. 找出最安全路径 给你一个下标从 0 开始、大小为 n x n 的二维矩阵 grid ,其中 (r, c) 表示: 如果 grid[r][c] 1 ,则表示一个存在小偷的单元格 如果 grid[r][c] 0 ,则表示一…...
轻触开关 KH-4.5X4.5X5.5H-STM
品 牌: kinghelm(金航标) 厂家型号: KH-4.5X4.5X5.5H-STM 封装: SMD 商品毛重: 0.317克(g) 包装方式: 编带...
3.redis客户端
1.命令行客户端 在安装redis的时候就已经安装好了,就是redis-cli redis-cli -h 127.0.0.1 -p 6379 -a 123456 -a 表示密码 -h 表示ip,不配置默认为本机 127.0.0.1 -p 表示端口,不配置默认为 6379 进入后可以输入ping,返回pong代表…...
Rust配置国内源,解决安装依赖慢问题
温馨提示:最新内容仅在原文更新。 国内源使用字节的RsProxy https://rsproxy.cn/ 解决rust-analyzer加载时间过长(请参考本文) 配置环境变量 Mac export RUSTUP_DIST_SERVER"https://rsproxy.cn" export RUSTUP_UPDATE_ROOT"https://rsproxy.cn/r…...
AI学习指南机器学习篇- Q学习的参数与调优
AI学习指南机器学习篇- Q学习的参数与调优 在强化学习领域中,Q学习是一种经典的算法,可以用来解决各种问题,包括游戏和机器人控制等。Q学习算法的性能很大程度上取决于一些重要的参数,例如学习率和折扣因子。本文将介绍这些参数的…...
《小迪安全》学习笔记02
域名默认存放目录和IP默认存放目录不一样。 IP地址是WWW文件里的,域名访问是WWW里的一个子目录里的(比如是blog)。 Nmap: Web源码拓展 拿到一个网站的源码,要分析这几个方面↑。 不同类型产生的漏洞类型也不一样 在网站中&…...
C语言:自定义类型进阶(结构体、联合体、枚举)
自定义类型(结构体、联合体、枚举) 一、结构体(一)结构体的内存对齐1、结构体内存对齐规则(1)引子(2)offsetof 宏函数(3)内存对齐原理(4ÿ…...
SPSSAU | 最好最差权重BWM原理及案例实操分析
BWM(best-worse-method,最好最差法)是一种多准则决策方法,由Jafar Rezaei于2015年提出,其通常用于确定决策标准的权重。其原理是比如5个指标,如果以前AHP就需要5个指标两两的相对重要性数据。但是现在简化为…...
docker安装elasticsearch(es)最新版本
docker安装elasticsearch(es) docker官网 https://hub.docker.com/ https://www.cnblogs.com/balloon72/p/13177872.html 1、拉取最新项目elasticsearch docker pull elasticsearch:8.14.3lscpu 查看架构 2、构建环境 mkdir -p /data/elasticsear…...
02 RabbitMQ:下载安装
02 RabbitMQ:下载&安装 1. 下载&安装1.1. 官网1.2. Docker方式1.2.1. 下载镜像1.2.2. 启动1.2.3. 登录验证 1. 下载&安装 1.1. 官网 RabbitMQ: One broker to queue them all | RabbitMQ 1.2. Docker方式 1.2.1. 下载镜像 # docker pull 镜像名称[…...
mmcv库出现No module named ‘mmcv._ext
遇到 "No module named mmcv._ext" 这个错误通常意味着你的 Python 环境中缺少 mmcv 库的扩展模块 _ext。mmcv(MMDetection 训练工具箱的核心库)通常依赖于 _ext 模块来提供一些高性能的操作,这些操作是用 C/C 实现的,并…...
防止xss(跨站脚本攻击)
1、输出数据时进行转义:这是最基本的预防措施。确保在输出数据到HTML时对特殊字符进行适当的转义,以防止它们被解释为HTML或JavaScript代码。PHP中可以使用htmlspecialchars()、strip_tags()、htmlentities函数来实现这一点。 echo htmlspecialchars($d…...
django小型超市库存与销售管理系统-计算机毕业设计源码46608
摘 要 随着信息技术的快速发展,超市库存与销售管理面临着前所未有的挑战与机遇。为了提升超市的运营效率,优化库存管理,并增强销售数据的分析能力,我们基于Django框架设计并开发了一套小型超市库存与销售管理系统。该系统充分利用…...
项目实战_表白墙(简易版)
你能学到什么 一个比较简单的项目:表白墙(简易版),浏览器:谷歌升级版将在下个博客发布 效果如下 正文 说明 我们是从0开始一步一步做这个项目的,里面的各种问题,我也会以第一人称视角来解…...
优化 Spring Boot 项目启动速度:高效管理大量 Bean 注入
个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…...
《LeetCode热题100》---<5.普通数组篇六道>
本篇博客讲解LeetCode热题100道普通数组篇中的六道题 第一道:最大子数组和(中等) 第二道:合并区间(中等) 第一道:最大子数组和(中等) 法一:贪心算法 class So…...
【Hot100】LeetCode—169. 多数元素
目录 题目1- 思路2- 实现⭐169. 多数元素——题解思路 3- ACM 实现 题目 原题连接:169. 多数元素 1- 思路 定义两个变量 一个是 count:维护当前元素的出现次数一个是 ret :维护当前元素 思路 遍历整个数组**①如果 count 0 **ÿ…...
专科、本科、研究生是按照什么分类的?
高等教育按照阶段主要分为以下几类 一、专业学位教育 特点:职业导向 专业学位教育是针对特定职业领域的专业培训,如医学、法律、工程等,旨在使学生具备从事相关职业所需的专业知识和实践技能。 实践性 专业学位教育注重实践教学和职业技…...
关于实时ODS层数仓搭建的三个问题
目录 问题一:数据同步的实时性无法满足 问题二:批量数据同步计算处理效率低 问题三:没有稳定的数据传输管道 FineDataLink的解决方案 实战案例-销售部门与财务部门数据同步 设置ODS层实时同步任务 设置DW层增量数据同步 设置 DM 层任务汇总 关…...
微信仿H5支付是什么
仿H5支付是指一种模拟原生H5支付流程的非官方支付方式。这种支付方式通常是由第三方支付服务提供商开发和维护的,目的是为了绕过官方支付渠道的限制,如费率、审核等问题。然而,由于仿H5支付并非官方授权和认可的支付方式,其安全性…...
网络安全知识竞赛规则及流程方案
为普及网络安全知识,进一步提升网络安全意识,树立正确的网络安全观,营造安全健康文明的网络环境,在2023年国家网络安全宣传周到来之际,特举办网络安全知识有奖竞赛活动,通过竞赛活动普及国家法律法规、政策…...
赞!蚓链用数字化打造助农扶农电商平台!
助农扶农电商平台在推动农村经济发展、促进农民增收方面发挥着重要作用。蚓链数字化平台使用“防伪溯源”为农户、商户、平台、政府与消费者打造了全方位的信任链条和纽带。给各方带来众多价值! (一)农户方面 1、拓宽销售渠道,降…...
RocketMQ延时消息
RocketMQ消息发送基本示例(推送消费者)-CSDN博客 RocketMQ消费者主动拉取消息示例-CSDN博客 RocketMQ顺序消息-CSDN博客 RocketMQ广播消息-CSDN博客 延时消息: 延时消息实现的效果就是产者调用 producer.send 方法后,消息会立即发送到 Broker,并被存…...
【C++/STL】:哈希的应用 -- 位图布隆过滤器
目录 🚀🚀前言一,位图1. 位图的概念2. STL库中的位图3. 位图的设计4. 位图的模拟实现5. 位图的优缺点6. 位图相关考察题⽬ 二,布隆过滤器1. 布隆过滤器的概念2. 布隆过滤器的实现3. 布隆过滤器删除问题4. 布隆过滤器的优缺点 点击…...
非线性面板数据实证模型及 Stata 具体操作步骤
目录 一、引言 二、文献综述 三、理论原理 四、实证模型 五、稳健性检验 六、程序代码及解释 一、引言 在当今的经济和社会研究中,非线性面板数据模型的应用日益广泛。这类模型能够更好地捕捉数据中的复杂关系,为研究者提供更深入和准确的分析结果。…...
视角 | 麻省理工学院提出出温度计校准法,专治AI大模型过度自信
在数字化浪潮的推动下,人工智能(AI)正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展,捕捉行业动态;提供深入的新闻解读,助您洞悉技术背后的逻辑;汇聚行业专家的见解,…...
昇思25天学习打卡营第XX天|CycleGAN图像风格迁移互换
CycleGAN是一种用于图像到图像翻译的生成对抗网络,它突破了传统域迁移模型的限制,无需成对样本即可学习图像在不同域间的转换。这种无监督的方法特别适用于难以获取配对数据的场景,例如艺术风格迁移。与需要成对训练样本的Pix2Pix不同&#x…...
嵌入式Linux学习: interrupt实验
Linux中的Interrupt(中断)系统是一个至关重要的组成部分,它负责管理和处理系统中发生的各种硬件和软件中断,确保系统能够正确响应外部设备的请求,保持系统的稳定性和可靠性。 1.中断的作用 允许设备在没有CPU干预的情…...
GPT-4o mini 来袭:开发者如何驾驭新一代AI模型?
GPT-4o Mini 来袭:开发者如何驾驭新一代 AI 模型? 引言 随着人工智能(AI)技术的飞速发展,越来越多的先进模型不断涌现,给各行各业带来了深远的影响。OpenAI 最新推出的 GPT-4o Mini 是一种创新的 AI 模型…...
校园点餐系统
1 项目介绍 1.1 摘要 在这个被海量信息淹没的数字化时代,互联网技术以惊人的速度迭代,信息的触角无处不在,社会的脉动随之加速。每一天,我们都被汹涌而至的数据浪潮包裹,生活在一个全方位的数字信息矩阵中。互联网的…...
做足球经理头像的网站/近期热点新闻
单例模式 允许自由创建每个类没有实际意义,还有可能造成系统性能下降 优势:减少创建java实例带来的系统开销 便于系统跟踪某个实例的生命周期,实例状态等 2 工厂模式: 工厂模式又分简单工厂模式,抽象工厂模式 使用简单…...
如何利用java工具做网站/河南it渠道网
JEPLUS平台扩展面板的配置使用(二)之前有过一篇笔记讲解了扩展面板的简单配置使用,以及扩展面板的配置过程和数据展示效果,今天这篇笔记就介绍一下扩展面板的其他数据展示效果以及配置过程。一、效果展示二、扩展面板展示数据的配…...
me域名网站/网上培训机构
好久不见,最近有点忙,好久没有发文章了,前天有个小学弟在写项目的过程中遇到了这个问题,由此写一篇文章。项目场景:Android自定义View在布局中设置颜色问题描述: 以下为学弟的代码//attrs文件//Java文件代码…...
济南房产网签查询系统/网站快速优化排名软件
在阅读深度学习类论文的时候,经常会见到embedding这个名词,却一直不知道其具体含义是什么,遂查询了很多资料,终于明白了其作用,记录于此,希望能帮助对此同样疑惑 的人。 1、在讲embedding之前必须要先说一…...
芙蓉区建设局网站/福州短视频seo服务
与VBOX相关操作: 1.右ctrl :ERH5在VBox中使用右边的ctrl实现光标的释放。 用exit退出当前terminal. 用halt 关机 reboot 重新启动就OK了。 linux命令的基本命令规定: 2.linux命令下是区分大小 写的。 3.命令 空格 -选项选项 名称OR路径;使用…...
wordpress调用时间/一个品牌的策划方案
一、lseek lseek函数的作用是用来重新定位文件读写的位移。 头文件以及函数声明 #include <sys/types.h> #include <unistd.h> off_t lseek(int fd, off_t offset, int whence); lseek()函数会重新定位被打开文件的位移量,根据参数offset以及whence的组…...