代码随想录算法训练营 Day52 图论Ⅲ 岛屿问题Ⅱ 面积 孤岛 水流 造岛
图论
题目
101. 孤岛的总面积
计算孤岛总面积,一个想法是将相邻的陆地的位置置为 0,最后计算孤岛面积中最小的一个
#include <iostream>
#include <vector>
#include <queue>using namespace std;int sum = 0;
int dir[4][2] = {0,-1,-1,0,0,1,1,0};// 这里面的vis没用到写出来就是联系模板代码用的
void dfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y) {if (vis[x][y] || grid[x][y] == 0) return;grid[x][y] = 0;vis[x][y] = true;for (int i = 0; i < 4; ++i) {int nextX = x + dir[i][0];int nextY = y + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;dfs(grid, vis, nextX, nextY);}
}void bfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y) {queue<pair<int, int>> que;que.push(make_pair(x, y));vis[x][y] = true;grid[x][y] = 0;while (!que.empty()) {pair<int, int> cur = que.front();que.pop();for (int i = 0; i < 4; ++i) {int nextX = cur.first + dir[i][0];int nextY = cur.second + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;if (grid[nextX][nextY] == 1 && !vis[nextX][nextY]) {grid[nextX][nextY] = 0;vis[nextX][nextY] = true;que.push({nextX, nextY});}}}
}int main() {int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<bool>> vis(n, vector<bool>(m, false));for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j ){cin >> grid[i][j];}}// 将紧邻陆置为0for (int i = 0; i < n; ++i) {if (grid[i][0] == 1) dfs(grid, vis, i, 0);if (grid[i][m-1] == 1) dfs(grid, vis, i, m-1);}for (int j = 0; j < m; ++j) {if (grid[0][j] == 1) bfs(grid, vis, 0, j);if (grid[n-1][j] == 1) bfs(grid, vis, n-1, j);}// 遍历孤岛总面积for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (grid[i][j] == 1) sum++;}}cout << sum << endl;
}
102. 沉没孤岛
沉默孤岛就可以使用 vis 数组了,遍历大陆框架
For (int i = 0; i < n; ++i) 这样从边框遍历,并记录遍历结果,最后 vis 就是我们访问过的非孤岛
返回 vis 就是将孤岛沉没后的结果
#include <iostream>
#include <vector>
#include <queue>using namespace std;int dir[4][2] = {0,-1,-1,0,0,1,1,0};
void dfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y) {vis[x][y] = true;for (int i = 0; i < 4; ++i) {int nextX = x + dir[i][0];int nextY = y + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;if (!vis[nextX][nextY] && grid[nextX][nextY] == 1) {dfs(grid, vis, nextX, nextY);}}
}void bfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y) {queue<pair<int, int>> que;que.push(make_pair(x, y));vis[x][y] = true;while (!que.empty()) {pair<int, int> cur = que.front();que.pop();for (int i = 0; i < 4; ++i) {int nextX = cur.first + dir[i][0];int nextY = cur.second + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;if (!vis[nextX][nextY] && grid[nextX][nextY] == 1) {vis[nextX][nextY] = true;que.push({nextX, nextY});}} }
}int main() {int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<bool>> vis(n, vector<bool>(m, false));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> grid[i][j];}}for (int i = 0; i < n; ++i) {if (grid[i][0] == 1) dfs(grid, vis, i, 0);if (grid[i][m-1] == 1) dfs(grid, vis, i, m-1);}for (int j = 0; j < m; ++j) {if (grid[0][j] == 1) bfs(grid, vis, 0, j);if (grid[n-1][j] == 1) bfs(grid, vis, n-1, j);}for (int i = 0; i < n; ++i) {for (int j = 0; j < m-1; ++j) {cout << vis[i][j] << " ";}cout << vis[i][m-1] << endl;}
}
103. 水流问题
题目是问:有没有一个节点可以让水流流到第一边界与第二边界,如果有输出这个节点的坐标
暴力想法:遍历每一个节点查看是否可以从该节点遍历到第一边界与第二边界
这样可以实现,但是时间复杂度太高,因为要对每个节点遍历整张地图
逆向想法:从第一边界与第二边界边开始逆向遍历
这样就只用遍历四个边的内容而不用遍历到里面的内容,减少了计算量
而且实际代码中流水是一条路径,遍历当前边的其他节点遇见了之前的路径就可以跳过了
Dfs bfs 判断条件就是要大于等于当前值的才继续搜索,从而实现标记
最后通过比较两个 vis 数组都 true的节点输出坐标即可
最后本质上由于 vis 存在每个节点至多访问一次复杂度为 n * m
#include <iostream>
#include <vector>
#include <queue>using namespace std;int dir[4][2] = {0,-1,-1,0,0,1,1,0};void dfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y) {// 终止条件访问过了就退出if (vis[x][y]) return;vis[x][y] = true;// 单层递归逻辑for (int i = 0; i < 4; ++i) {int nextX = x + dir[i][0];int nextY = y + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;// 水流情况判断 逆向蔓延往高处流if (grid[x][y] > grid[nextX][nextY]) continue;dfs(grid, vis, nextX, nextY);}return;
}void bfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y) {queue<pair<int, int>> que;que.push(make_pair(x, y));vis[x][y] = true;while (!que.empty()) {pair<int, int> cur = que.front();que.pop();for (int i = 0; i < 4; ++i) {int nextX = cur.first + dir[i][0];int nextY = cur.second + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;// 水流方向判断if (grid[cur.first][cur.second] > grid[nextX][nextY]) continue;if (!vis[nextX][nextY]){vis[nextX][nextY] = true;que.push(make_pair(nextX, nextY));}}}
}int main() {int n, m;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<bool>> firstVis(n, vector<bool>(m, false));vector<vector<bool>> secondVis(n, vector<bool>(m, false));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> grid[i][j];}}// 从两边逆向遍历for (int i = 0; i < n; ++i) {dfs(grid, firstVis, i, 0);dfs(grid, secondVis, i, m-1);}for (int j = 0; j < m; ++j) {bfs(grid, firstVis, 0, j);bfs(grid, secondVis, n-1, j);}// 输出结果 只有两个vis均为true的时候输出坐标for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (firstVis[i][j] && secondVis[i][j]) {cout << i << " " << j << endl;}}}return 0;
}
104. 建造最大岛屿
建造岛屿问题,默认方法就是遍历
优化方法:由于给出的是岛屿地图因此可以对不同岛屿编号直接利用岛屿编号代替遍历
1. 对岛屿遍历记录岛屿的编号与面积的关系,使用 unordermap
2. 对地图中每个海洋 0 变成 1 后直接遍历周围遍历到岛屿的时候直接取编号相加即可
这里面要防止重复添加可以记录已经添加了的岛屿到集合中搜索到之后就不再添加了
#include <iostream>
#include <vector>
#include <queue>
#include <unordered_map>
#include <unordered_set>using namespace std;int markIdx = 1, count = 0;
int dir[4][2] = {0,-1,-1,0,0,1,1,0};void dfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y, int mark) {if (vis[x][y] || grid[x][y] == 0) return;vis[x][y] = true;grid[x][y] = mark;count++; // 统计当前岛屿的面积for (int i = 0; i < 4; ++i) {int nextX = x + dir[i][0];int nextY = y + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;dfs(grid, vis, nextX, nextY, mark);}
}int main() {int n, m, res = 0;cin >> n >> m;unordered_map<int, int> map; // 记录岛屿编号与岛屿面积unordered_set<int> set; // 记录参与计算面积的岛屿vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<bool>> vis(n, vector<bool>(m, false));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> grid[i][j];}}bool allLand = true;// 步骤一 遍历岛屿记录岛屿面积与标号 mark从2开始 1表示填海造陆的岛屿for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (grid[i][j] == 0) allLand = false;if (!vis[i][j] && grid[i][j] == 1) {count = 0;markIdx = markIdx+1;dfs(grid, vis, i, j, markIdx);map[markIdx] = count;}}}if(allLand) {cout << n * m << endl;return 0;}// 步骤二 遍历整个地图将海洋变成岛屿 然后遍历岛屿记录面积for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {count = 1; // 海洋变成了陆地用于记录陆地面积set.clear(); // 清空选择if (grid[i][j] == 0) {for (int k = 0; k < 4; ++k){int nextX = i + dir[k][0];int nextY = j + dir[k][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;// 记录是否添加了这个岛屿if (set.count(grid[nextX][nextY])) continue;count += map[grid[nextX][nextY]];set.insert(grid[nextX][nextY]);}}res = max(res, count);}}cout << res << endl;
}// 模式2#include <iostream>
#include <vector>
#include <queue>
#include <unordered_set>
#include <unordered_map>using namespace std;int count = 0;
int dir[4][2] = {0,-1,-1,0,0,1,1,0};void bfs(vector<vector<int>>& grid, vector<vector<bool>>& vis, int x, int y, int mark) {queue<pair<int, int>> que;que.push({x, y});vis[x][y] = true;grid[x][y] = mark;while (!que.empty()) {pair<int, int> cur = que.front();que.pop();for (int i = 0; i < 4; ++i) {int nextX = cur.first + dir[i][0];int nextY = cur.second + dir[i][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;if (!vis[nextX][nextY] && grid[nextX][nextY] == 1) {que.push({nextX, nextY});vis[nextX][nextY] = true;grid[nextX][nextY] = mark;count++;}}}
}int main() {int n,m, markIdx = 2, sum = 0;cin >> n >> m;vector<vector<int>> grid(n, vector<int>(m, 0));vector<vector<bool>> vis(n, vector<bool>(m, false));for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {cin >> grid[i][j];}}bool allLand = true;unordered_map<int, int> map;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {if (grid[i][j] == 0) allLand = false;if (!vis[i][j] && grid[i][j] == 1) {count = 1;bfs(grid, vis, i, j, markIdx);map[markIdx] = count;markIdx++;}}}if (allLand) {cout << n * m << endl;return 0;}unordered_set<int> set;for (int i = 0; i < n; ++i) {for (int j = 0; j < m; ++j) {count = 0;set.clear();if (grid[i][j] == 0) {count = 1;for (int k = 0; k < 4; ++k) {int nextX = i + dir[k][0];int nextY = j + dir[k][1];if (nextX < 0 || nextX >= grid.size() || nextY < 0 || nextY >= grid[0].size()) continue;if (set.count(grid[nextX][nextY])) continue;count += map[grid[nextX][nextY]];set.insert(grid[nextX][nextY]);}}sum = max(sum, count);}}cout << sum << endl;return 0;
}
相关文章:
代码随想录算法训练营 Day52 图论Ⅲ 岛屿问题Ⅱ 面积 孤岛 水流 造岛
图论 题目 101. 孤岛的总面积 计算孤岛总面积,一个想法是将相邻的陆地的位置置为 0,最后计算孤岛面积中最小的一个 #include <iostream> #include <vector> #include <queue>using namespace std;int sum 0; int dir[4][2] {0,-1…...
实用 Git 学习工具推荐:Learn Git Branching
https://learngitbranching.js.org/?localezh_CN 网站概述 Learn Git Branching 是一个面向开发者的交互式 Git 学习平台,专为那些希望通过实践掌握 Git 高级用法的用户设计。网站采用游戏化的界面和渐进式挑战,让复杂的 Git 概念变得直观易懂。无论是…...
物流项目第三期(统一网关、工厂模式运用)
前两期: 物流项目第一期(登录业务)-CSDN博客 物流项目第二期(用户端登录与双token三验证)-CSDN博客 为什么要有网关? 通过前面的课程我们已经完成了四个端的登录,但是我们并没有对登录后的请…...
安卓settings单双屏显示
Settings/src/com/android/settings/homepage/SettingsHomepageActivity.java的onCreate方法中,创建布局之前会通过ActivityEmbeddingUtils.isEmbeddingActivityEnabled(this);去获取是否使用嵌入式显示。 mIsEmbeddingActivityEnabled ActivityEmbeddingUtils.is…...
SpringCloud+Vue实现大文件分片下载(支持开始、暂停、继续、取消)
1. 实现效果 http://localhost:8089/#/demo 所有代码已提交至 https://github.com/SJshenjian/cloud.git与 https://github.com/SJshenjian/cloud-web.git中,欢迎star 2. 后端核心代码 FeignClient(value "download", contextId "download"…...
RK3576 Android 14.0 SDK开发指南(第一集)
RK3576 Android 14.0 SDK代码编译 SDK下载到本地后大概70多个G 下载后要做个校验 解压后内核源码 kernel代码路径说明 Android14支持6.1 版本的kernel,kernel源码在工程中kernel-6.1目录下 Lunch项说明 一键编译命令 ./build.sh -UKAupSoc RK3576 SDK默认没有开…...
【C/C++】现代C++线程池:从入门到生产级实现
文章目录 现代C线程池:从入门到生产级实现🧠 What Is a Thread Pool?🧩 Why Use a Thread Pool?🔰 Part 1: Basic Thread Pool (Beginner)🔧 Minimal Working Code:✅ Usage: 🧑🔬 Part 2: …...
后期:daplink
问题描述: 问题一:总工程,USB插入能识别到dap,但有个黄色的感叹号!现在连感叹号都没有了。 重点跟踪了枚举的几个函数,差异点就是有个工厂描述符没有枚举到。 问题二: 下载后,目标板,没有自动复位。 问题三:未移植daplink的时候,虚拟串口是收发正常,貌似没有映射到…...
Android SharedPreferences:从零到一的全面解析与实战指南
简介 SharedPreferences是Android平台提供的一种轻量级键值对存储方案,虽然看似简单,但在实际开发中却蕴含着丰富的技术细节和最佳实践。本文将从基本概念出发,深入分析其源码实现原理,探讨企业级开发中的应用技巧,并提供完整的代码示例,帮助开发者全面掌握这一重要数据…...
推扫式高光谱相机VIX-N230重磅发布——开启精准成像新时代
随着各行业对高光谱成像技术需求的持续增长,市场对于高分辨率、高灵敏度以及快速成像的高光谱相机的需求愈发迫切。中达瑞和凭借多年的行业经验和技术积累,敏锐捕捉到这一市场趋势,正式推出全新一代推扫式可见光近红外高光谱相机——VIX-N230…...
实现rpc通信机制(待定)
一、概述 (1)rpc(remote procedure call, 远程接口调用),就像在本地调用函数一样,是应用组成服务内部分布式的基础功能。应用场景是在内网中的计算,比如:(a) 为上传的一张图片加水印、…...
STM32--串口函数
USART_GetFlagStatus() 用于获取某个串口的寄存器中的某个标志位的状态,和中断无关。 USART_ClearFlag() 用于清楚串口寄存器中的标志位的状态,和中断无关。 USART_ITConfig() 使能或禁用指定的 USART 中断。 USART_ITConfig(USART1, USART_IT_TXE, …...
Linux跨网络通信中IP与MAC的作用
是的,MAC地址和IP地址分别属于OSI模型的不同层次,并在数据封装过程中被添加到不同的位置: 1. MAC地址(数据链路层) 作用层级:数据链路层(第二层)。封装位置:添加到数据链…...
Facebook隐私保护的成与败:一场对用户信任的考验
引言 在这个信息爆炸的时代,Facebook作为全球最大的社交网络平台之一,其隐私保护政策和实践一直是公众关注的焦点。随着数据泄露事件的频发,Facebook在隐私保护方面的成与败,不仅关系到其自身的声誉,更是对用户信任的…...
面试算法刷题3(核心+acm)
102. 二叉树的层序遍历 递归法 核心代码模式 不断递归根节点,根据深度来判断加在哪一层上。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(in…...
[Java] idea的调试介绍
1. 什么是调试? 调试就是帮助我们去寻找代码中的bug,优化代码的过程。调试对于程序员来说非常重要,能帮助我们更容易去找到代码中的错误,去修复。 2. idea集成开发环境的调试 下面我就介绍下idea集成开发环境下的调试ÿ…...
winrm ‘Protocol‘ object has no attribute ‘run_ps‘
在使用 winrm 库时遇到错误 ‘Protocol’ object has no attribute ‘run_ps’ 通常意味着你正在尝试使用一个不存在的属性或方法。在 Python 中使用 winrm 库时,正确的调用方式应该使用 client 对象来运行 PowerShell 命令,而不是直接在 Protocol 对象上…...
WHAT - CSS 中的 min-width
文章目录 基本语法常见取值使用场景举例min-width: 0为什么 min-width: 0 重要?场景演示提示 注意事项 在 WHAT - CSS 中的 width 中我们已经详细介绍过 width。那为什么 CSS 还要提供一个 min-width? 阅读本文前可先阅读 MDN - min-width。 min-width…...
测试W5500的第2步_使用ioLibrary库创建TCP客户端
ioLibrary库下载地址:文件下载地址:https://gitee.com/wiznet-hk/STM32F10x_W5500_Examples 源文件下载地址:https://gitee.com/wiznet-hk 没有注册的,只能复制粘贴了。 本文介绍了如何初始化STM32的硬件资源,配置W5500的网络参数ÿ…...
深度学习中的正则化方法与卷积神经网络基础
笔记 1 正则化方法 1.1 什么是正则化 防止模型过拟合(训练集效果好, 测试集效果差), 提高模型泛化能力 一种防止过拟合, 提高模型泛化能力的策略 L1正则: 需要通过手动写代码实现 L2正则: SGD(weight_decay) dropout BN 1.2 Dropout正则化 让神经元以p概率随机死亡, 每…...
pg_dump
以下是 PostgreSQL 中 pg_dump 命令的 核心参数 及 使用示例 的详细说明: 一、核心参数分类及说明 pg_dump 主要用于备份单个数据库,支持多种格式和灵活的控制选项。以下是其关键参数分类: 1. 连接参数 参数说明-h, --hostHOST数据库服务器…...
css使用clip-path属性切割显示可见内容
1. 需求 想要实现一个渐变的箭头Dom,不想使用svg、canvas去画,可以考虑使用css的clip-path属性切割显示内容。 2. 实现 <div class"arrow">箭头 </div>.arrow{width: 200px;height: 60px;background-image: linear-gradient(45…...
系统设计——项目设计经验总结1
摘要 在系统设计的时候,注意域的区分,功能区分、类的区分、方法区分范围和定义。在系统设计的时候的,需要思考类、方法在什么情况下会涉及到修改,遵循记住:一个类应该只有一个原因被修改! 当不满足&#x…...
如何在WordPress网站上添加即时聊天功能
在 WordPress 网站上添加即时聊天功能既简单又有益。近年来,即时聊天已经有了长足的发展,融入了强大的交流和自动化功能,类似于流行的人工智能聊天机器人。无论您是想提高销售转化率还是将人工智能整合到客户服务流程中,在 WordPr…...
[luogu12542] [APIO2025] 排列游戏 - 交互 - 博弈 - 分类讨论 - 构造
传送门:https://www.luogu.com.cn/problem/P12542 题目大意:给定一个长为 n n n 的排列和一张 m m m 个点 e e e 条边的简单连通图。每次你可以在图上每个点设置一个 0 ∼ n − 1 0\sim n-1 0∼n−1、两两不同的权值发给交互库,交互库会…...
图像处理基础知识
OpenCV计算机视觉开发实践:基于Qt C - 商品搜索 - 京东 信息是自然界物质运动总体的一个重要方面,人们认识世界和改造世界就是要获得各种各样的图像信息,这些信息是人类获得外界信息的主要来源。大约有70%的信息是通过人眼获得的。近代科学研…...
使用MybatisPlus实现sql日志打印优化
背景: 在排查无忧行后台服务日志时,一个请求可能会包含多个执行的sql,经常会遇到SQL语句与对应参数不连续显示,或者参数较多需要逐个匹配的情况。这种情况下,如果需要还原完整SQL语句就会比较耗时。因此,我…...
HarmonyOS5云服务技术分享--ArkTS开发Node环境
✨ 你好呀,开发者小伙伴们!今天我们来聊聊如何在HarmonyOS(ArkTS API 9及以上)中玩转云函数,特别是结合Node.js和HTTP触发器的开发技巧。文章会手把手带你从零开始,用最接地气的方式探索这个功能࿰…...
水利数据采集MCU水资源的智能守护者
水利数据采集仪MCU,堪称水资源的智能守护者,其重要性不言而喻。在水利工程建设和水资源管理领域,MCU数据采集仪扮演着不可或缺的角色。它通过高精度的传感器和先进的微控制器技术,实时监测和采集水流量、水位、水质等关键数据&…...
深度学习之用CelebA_Spoof数据集搭建一个活体检测-用MNN来推理时候如何利用Conan对软件包进行管理
我为什么用Conan 前面的文章:深度学习之用CelebA_Spoof数据集搭建一个活体检测-训练好的模型用MNN来推理有提到怎么使用MNN对训练好的模型进行推理,里面并没有提到我是怎么编译和进行代码依赖包的管理的详细步骤,在这里我是用的是Conan:一个…...
深入解剖 G1 收集器的分区模型与调优策略
JVM 垃圾收集系列之三 | 高并发低延迟系统的首选 GC 解法! 一、为什么我们需要 G1 垃圾收集器? 在传统 GC(如 CMS)中,我们常常面临的问题是: GC 停顿不可预测(Stop-The-World)内存…...
兰亭妙微・UI/UX 设计・全链路开发
【遇见专业设计,共筑卓越产品】 在数字化浪潮中,界面是产品与用户对话的第一窗口。 兰亭妙微(蓝蓝设计),自 2008 年深耕 UI/UX 领域,以清华团队为核心,16 年专注软件与互联网产品的界面设计开…...
Babylon.js学习之路《六、材质与纹理:为模型赋予真实的表面效果》
文章目录 1. 引言:材质与纹理的重要性1.1 材质与纹理的核心作用 2. 基础材质:StandardMaterial2.1 材质属性详解2.2 实战:创建金属材质 3. 纹理贴图:从基础到高级3.1 基础纹理映射3.2 多纹理混合技术 4. 高级材质:PBRM…...
飞致云旗下开源项目GitHub Star总数突破150,000个
2025年5月19日,中国领先的开源软件提供商飞致云宣布,其旗下开源项目在代码托管平台GitHub上所获得的Star总数已经超过150,000个。基于在开源领域的长期耕耘和探索,飞致云的开源势能不断增强,获得第一个五万GitHub Star用时89个月&…...
萌新联赛第(三)场
C题 这道题用暴力去写想都不要想,一定超时,于是我们需要优化,下面是思路过程: 如图,本题只需找到x的因数个数和(n-x)的因数个数,这两个相乘,得到的就是对于这个x来说组合的个数,且x…...
cplex12.9 安装教程以及下载
cplex 感觉不是很好找,尤其是教育版,我这里提供一个版本,在下面的图可以看到,不仅可以配置matlab,也可以配置vs,现在拿vs2017来测试一下,具体文件的文件有需要的可以复制下面的链接获取 我用网盘分享了「c…...
Pycharm-jupyternotebook不渲染
解决方案: https://youtrack.jetbrains.com/issue/PY-54244 import plotly.io as pio pio.renderers.default "vscode"...
layui 介绍
layui(谐音:类 UI) 是一套开源的 Web UI 解决方案,采用自身经典的模块化规范,并遵循原生 HTML/CSS/JS 的开发方式,极易上手,拿来即用。其风格简约轻盈,而组件优雅丰盈,从源代码到使用…...
大数据相关操作
大数据相关操作 一、环境配置 1、修改主机名 #修改主机名 hostnamectl set-hostname master2、固定IP地址 # 进入修改 sudo vim /etc/netplan/01-network-manager-all.yaml# 修改配置文件 # Let NetworkManager manage all devices on this system network:version: 2rend…...
谷歌宣布推出 Android 的新安全功能,以防止诈骗和盗窃
在上周二的 Android Show 上,也就是Google I/O 开发者大会之前,谷歌宣布了 Android 的全新安全和隐私功能。这些新功能包括对通话、屏幕共享、消息、设备访问和系统级权限的全新保护。谷歌希望通过这些功能保护用户免遭诈骗,在设备被盗或被攻…...
WSL虚拟机整体迁移教程(如何将WSL从C盘迁移到其他盘)
文章目录 WSL虚拟机迁移教程一、查看当前主机的子系统二、导出 WSL 子系统三、将打包好的文件发送给另一个人四、在另一台机器导入并恢复子系统五、附加命令六、注意事项和导出文件信息6.1 注意事项6.2 导出文件信息使用 wsl --export 命令导出整个 WSL 子系统时,它…...
汽车区域电子电气架构(Zonal E/E)的统一
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界…...
开源一个记账软件,支持docker一键部署
欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 开源一个记账软件,支持docker一键部署 项目简介功能特性技术栈快速开始环境要求运行步…...
新能源汽车焊接智能节气阀
在新能源汽车产业迅猛发展的浪潮中,制造工艺的优劣直接关系到车辆的性能、安全与市场竞争力。焊接,作为新能源汽车生产流程里的关键一环,无论是构建车身框架,还是连接电池模组,其质量的好坏都起着决定性作用。而在焊接…...
React 第四十四节Router中 usefetcher的使用详解及注意事项
前言 useFetcher 是 React Router 中一个强大的钩子,用于在不触发页面导航的情况下执行数据加载(GET)或提交(POST)。 一、useFetcher 应用场景: 1、后台数据预加载(如鼠标悬停时加载数据&…...
33、魔法防御术——React 19 安全攻防实战
一、奥术护盾(基础防御) 1. 敏感数据加密术 // cryptoUtils.js - 数据加密工具export const encrypt (data) > {// 实际项目应使用Web Crypto API或crypto-jsreturn btoa(encodeURIComponent(data));};export const decrypt (data) > {try {…...
NVM 安装与配置指南
简介 Node Version Manager(NVM)是一个常用的 Node.js 版本管理工具,可用于在开发过程中方便地切换不同版本的 Node.js。通过 NVM,用户可以根据项目需求选择不同的 Node.js 版本,而无需手动安装和卸载多个版本的 Node…...
SpringMVC04所有注解按照使用位置划分| 按照使用层级划分(业务层、视图层、控制层)
目录 一、所有注解按照使用位置划分(类、方法、参数) 1. 类级别注解 2. 方法级别注解 3. 参数级别注解 4. 字段/返回值注解 二、按照使用层级划分(业务层、视图层、控制层) 1、控制层(Controller Layer&#x…...
【数据库】-1 mysql 的安装
文章目录 1、mysql数据库1.1 mysql数据库的简要介绍 2、mysql数据库的安装2.1 centos安装2.2 ubuntu安装 1、mysql数据库 1.1 mysql数据库的简要介绍 MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,目前…...
MySQL与Redis一致性问题分析
一、一致性问题概述 1.1 什么是一致性问题? 在数据库-缓存架构中,当MySQL中的数据(最新值)与Redis缓存中的数据(缓存旧值)出现差异时,由于程序总是优先读取Redis缓存,就会导致应用…...