代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)
图论part03
孤岛的总面积
代码随想录链接
题目链接
视频讲解链接
思路:既然某个网格在边界上的岛屿不是孤岛,那么就把非 孤岛的所有岛屿变成海洋,最后再次统计还剩余的岛屿占据的网格总数即可。
dfs:
import java.util.Scanner;public class Main{static int res = 0;static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};// TODO 4.dfs遍历逻辑private static void dfs(int[][] graph , int x , int y){graph[x][y] = 0;for(int i = 0 ; i < 4 ; i++){int nextX = x + dir[i][0];int nextY = y + dir[i][1];if(nextX < 0 || nextY < 0 || nextX >= graph.length || nextY >= graph[0].length) continue;if(graph[nextX][nextY] == 1){graph[nextX][nextY] = 0;dfs(graph,nextX,nextY);}}}public static void main(String[] args){// TODO 1.生成graphScanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] graph = new int[n][m];for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){graph[i][j] = sc.nextInt();}}// sc.colse();// TODO 2.仅对四个边进行遍历,遇到陆地的时候将该陆地和与之相邻的陆地全部变为海洋for(int i = 0; i < n ; i++){if(graph[i][0] == 1){dfs(graph,i,0);}}for(int i = 0; i < n ; i++){if(graph[i][m - 1] == 1){dfs(graph,i,m-1);}}for(int j = 0 ; j < m ; j++){if(graph[0][j] == 1){dfs(graph,0,j);}}for(int j = 0 ; j < m ; j++){if(graph[n - 1][j] == 1){dfs(graph,n-1,j);}}// TODO 3.遍历图,获取所有岛屿土地数量int sum = 0 ;for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){if(graph[i][j] == 1 ){sum++; }}}System.out.println(sum);}
}
bfs:
import java.util.*;public class Main{static int res = 0;static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};// TODO 4.bfs遍历逻辑private static void bfs(int[][] graph , int x , int y){class Node{int x;int y;public Node(int x , int y){this.x = x;this.y = y;}}Queue<Node> queue = new LinkedList<>();queue.add(new Node(x,y));graph[x][y] = 0;while(!queue.isEmpty()){Node node = queue.remove();for(int i = 0 ; i < 4 ; i++){int nextX = node.x + dir[i][0];int nextY = node.y + dir[i][1];if(nextX < 0 || nextY < 0 || nextX >= graph.length || nextY >= graph[0].length)continue;if(graph[nextX][nextY] == 1){graph[nextX][nextY] = 0;queue.add(new Node(nextX,nextY));}}}}public static void main(String[] args){// TODO 1.生成graphScanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] graph = new int[n][m];for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){graph[i][j] = sc.nextInt();}}// sc.colse();// TODO 2.仅对四个边进行遍历,遇到陆地的时候将该陆地和与之相邻的陆地全部变为海洋for(int i = 0; i < n ; i++){if(graph[i][0] == 1){bfs(graph,i,0);}}for(int i = 0; i < n ; i++){if(graph[i][m - 1] == 1){bfs(graph,i,m-1);}}for(int j = 0 ; j < m ; j++){if(graph[0][j] == 1){bfs(graph,0,j);}}for(int j = 0 ; j < m ; j++){if(graph[n - 1][j] == 1){bfs(graph,n-1,j);}}// TODO 3.遍历图,获取所有岛屿土地数量int sum = 0 ;for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){if(graph[i][j] == 1 ){sum++; }}}System.out.println(sum);}
}
沉没孤岛
代码随想录链接
题目链接
视频讲解链接
思路:在这道题之中,我们只需要将图保留两份,一份计算孤岛,计算完之后对第二份图的孤岛进行去除即可。
DFS:
import java.util.Scanner;public class Main{static int res = 0;static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};// TODO 4.dfs遍历逻辑private static void dfs(int[][] graph , int x , int y){graph[x][y] = 0;for(int i = 0 ; i < 4 ; i++){int nextX = x + dir[i][0];int nextY = y + dir[i][1];if(nextX < 0 || nextY < 0 || nextX >= graph.length || nextY >= graph[0].length) continue;if(graph[nextX][nextY] == 1){graph[nextX][nextY] = 0;dfs(graph,nextX,nextY);}}}public static void main(String[] args){// TODO 1.生成graphScanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] graph = new int[n][m];int[][] graph2 = new int[n][m];for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){int num = sc.nextInt();graph[i][j] = num;graph2[i][j] = num;}}// sc.colse();// TODO 2.仅对四个边进行遍历,遇到陆地的时候将该陆地和与之相邻的陆地全部变为海洋for(int i = 0; i < n ; i++){if(graph[i][0] == 1){dfs(graph,i,0);}}for(int i = 0; i < n ; i++){if(graph[i][m - 1] == 1){dfs(graph,i,m-1);}}for(int j = 0 ; j < m ; j++){if(graph[0][j] == 1){dfs(graph,0,j);}}for(int j = 0 ; j < m ; j++){if(graph[n - 1][j] == 1){dfs(graph,n-1,j);}}// TODO 3.遍历图,获取所有岛屿土地数量for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){if(graph[i][j] == 1 && graph2[i][j] == 1){graph2[i][j] = 0; }System.out.print(graph2[i][j] + " ");}System.out.println();}// for(int i = 0 ; i < n ; i++){// for(int j = 0 ; j < m ; j++){// System.out.print(graph2[i][j] + " ");// }// System.out.println();// }}
}
BFS:
import java.util.*;public class Main{static int res = 0;static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};// TODO 4.bfs遍历逻辑private static void bfs(int[][] graph , int x , int y){class Node{int x;int y;public Node(int x , int y){this.x = x;this.y = y;}}Queue<Node> queue = new LinkedList<>();queue.add(new Node(x,y));graph[x][y] = 0;while(!queue.isEmpty()){Node node = queue.remove();for(int i = 0 ; i < 4 ; i++){int nextX = node.x + dir[i][0];int nextY = node.y + dir[i][1];if(nextX < 0 || nextY < 0 || nextX >= graph.length || nextY >= graph[0].length)continue;if(graph[nextX][nextY] == 1){graph[nextX][nextY] = 0;queue.add(new Node(nextX,nextY));}}}}public static void main(String[] args){// TODO 1.生成graphScanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] graph = new int[n][m];int[][] graph2 = new int[n][m];for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){int num = sc.nextInt();graph[i][j] = num;graph2[i][j] = num;}}// sc.colse();// TODO 2.仅对四个边进行遍历,遇到陆地的时候将该陆地和与之相邻的陆地全部变为海洋for(int i = 0; i < n ; i++){if(graph[i][0] == 1){bfs(graph,i,0);}}for(int i = 0; i < n ; i++){if(graph[i][m - 1] == 1){bfs(graph,i,m-1);}}for(int j = 0 ; j < m ; j++){if(graph[0][j] == 1){bfs(graph,0,j);}}for(int j = 0 ; j < m ; j++){if(graph[n - 1][j] == 1){bfs(graph,n-1,j);}}// TODO 3.遍历图,获取所有岛屿土地数量for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){if(graph[i][j] == 1 && graph2[i][j] == 1){graph2[i][j] = 0; }System.out.print(graph2[i][j] + " ");}System.out.println();}}
}
水流问题
代码随想录链接
题目链接
视频讲解链接
暴力DFS:
import java.util.*;public class Main{static int m,n;// static int[][] dir = {{0,1},{1,0},{0,-1},{1-,0}};static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};private static void dfs(int[][] graph , boolean[][] visted , int x , int y ){if(visted[x][y]) return ;visted[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 || nextY < 0 || nextX >= n || nextY >= m) continue;if(graph[x][y] < graph[nextX][nextY]) continue;dfs(graph,visted,nextX,nextY);}}private static boolean isResult(int[][] graph , int x , int y){boolean[][] visted = new boolean[n][m];dfs(graph,visted,x,y);boolean isFirst = false;boolean isSecond = false;// 判断当前的(x,y)节点是否从第一组边界出去for(int i = 0 ; i < n ; i++){if(visted[i][0]){isFirst = true;break;}}for(int j = 0 ; j < m ; j++){if(visted[0][j]){isFirst = true;break;}}// 判断当前的(x,y)节点是否从第二组边界出去for(int i = 0 ; i < n ; i++){if(visted[i][m-1]){isSecond = true;break;}}for(int j = 0 ; j < m ; j++){if(visted[n - 1][j]){isSecond = true;break;}}return isFirst&&isSecond;}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();int[][] graph = new int[n][m];for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){graph[i][j] = sc.nextInt();}} for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){if(isResult(graph,i,j))System.out.println(i + " " + j);}}}
}
暴力BFS:(超时)
import java.util.*;public class Main{static int m,n;// static int[][] dir = {{0,1},{1,0},{0,-1},{1-,0}};static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};private static void bfs(int[][] graph , boolean[][] visted , int x , int y ){class Node{int x ;int y;public Node(int x , int y){this.x = x;this.y = y;}}Queue<Node> queue = new LinkedList<>();queue.add(new Node(x,y));visted[x][y] = true;while(!queue.isEmpty()){Node node = queue.remove();for(int i = 0 ; i < 4 ; i++){int nextX = node.x + dir[i][0];int nextY = node.y + dir[i][1];if(nextX < 0 || nextY < 0 || nextX >= n || nextY >= m ) continue;if(visted[nextX][nextY]) continue;if(graph[node.x][node.y] < graph[nextX][nextY] ) continue;queue.add(new Node(nextX,nextY));visted[nextX][nextY] = true;}}}private static boolean isResult(int[][] graph , int x , int y){boolean[][] visted = new boolean[n][m];bfs(graph,visted,x,y);boolean isFirst = false;boolean isSecond = false;// 判断当前的(x,y)节点是否从第一组边界出去for(int i = 0 ; i < n ; i++){if(visted[i][0]){isFirst = true;break;}}for(int j = 0 ; j < m ; j++){if(visted[0][j]){isFirst = true;break;}}// 判断当前的(x,y)节点是否从第二组边界出去for(int i = 0 ; i < n ; i++){if(visted[i][m-1]){isSecond = true;break;}}for(int j = 0 ; j < m ; j++){if(visted[n - 1][j]){isSecond = true;break;}}return isFirst&&isSecond;}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();int[][] graph = new int[n][m];for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){graph[i][j] = sc.nextInt();}} for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){if(isResult(graph,i,j))System.out.println(i + " " + j);}}}
}
DFS优化:
采用逆向思维,考虑水流从低处往高处可以流通的情况,从而获得第一组边界的流通情况和第二组流水的情况,二者均为true的情况则表明该网格可以从第一组边界和第二组边界流出。
import java.util.*;public class Main{static int m,n;// static int[][] dir = {{0,1},{1,0},{0,-1},{1-,0}};static int[][] dir = {{0,1},{1,0},{0,-1},{-1,0}};private static void dfs(int[][] graph , boolean[][] visted , int x , int y , int preH){// 遇到边界或者访问过的点直接返回if(x < 0 || y < 0 || x >= graph.length ||y >= graph[0].length || visted[x][y]) return;if(graph[x][y] < preH) return ;visted[x][y] = true;dfs(graph,visted,x+1,y,graph[x][y]);dfs(graph,visted,x,y+1,graph[x][y]);dfs(graph,visted,x-1,y,graph[x][y]);dfs(graph,visted,x,y-1,graph[x][y]);}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();int[][] graph = new int[n][m];boolean[][] firstB = new boolean[n][m];boolean[][] secondB = new boolean[n][m];for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){graph[i][j] = sc.nextInt();}} // 从上下边界进行DFSfor(int j = 0 ; j < m ; j++){dfs(graph,firstB,0,j,Integer.MIN_VALUE);dfs(graph,secondB,n-1,j,Integer.MIN_VALUE);}// 从左右边界进行DFSfor(int i = 0 ; i < n ; i++){dfs(graph,firstB,i,0,Integer.MIN_VALUE);dfs(graph,secondB,i,m-1,Integer.MIN_VALUE);}for(int i = 0 ; i < n ; i++){for(int j = 0 ; j < m ; j++){if(firstB[i][j] && secondB[i][j])System.out.println(i + " " + j);}}}
}
BFS(待补充)
建造最大岛屿(待完成)
代码随想录链接
题目链接
视频讲解链接
import java.util.*;
public class Main {// 该方法采用 DFS// 定义全局变量// 记录每次每个岛屿的面积static int count;// 对每个岛屿进行标记static int mark;// 定义二维数组表示四个方位static int[][] dirs = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};// DFS 进行搜索,将每个岛屿标记为不同的数字public static void dfs(int[][] grid, int x, int y, boolean[][] visited) {// 当遇到边界,直接returnif (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length) return;// 遇到已经访问过的或者遇到海水,直接返回if (visited[x][y] || grid[x][y] == 0) return;visited[x][y] = true;count++;grid[x][y] = mark;// 继续向下层搜索dfs(grid, x, y + 1, visited);dfs(grid, x, y - 1, visited);dfs(grid, x + 1, y, visited);dfs(grid, x - 1, y, visited);}public static void main (String[] args) {// 接收输入Scanner sc = new Scanner(System.in);int m = sc.nextInt();int n = sc.nextInt();int[][] grid = new int[m][n];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {grid[i][j] = sc.nextInt();}}// 初始化mark变量,从2开始(区别于0水,1岛屿)mark = 2;// 定义二位boolean数组记录该位置是否被访问boolean[][] visited = new boolean[m][n];// 定义一个HashMap,记录某片岛屿的标记号和面积HashMap<Integer, Integer> getSize = new HashMap<>();// 定义一个HashSet,用来判断某一位置水四周是否存在不同标记编号的岛屿HashSet<Integer> set = new HashSet<>();// 定义一个boolean变量,看看DFS之后,是否全是岛屿boolean isAllIsland = true;// 遍历二维数组进行DFS搜索,标记每片岛屿的编号,记录对应的面积for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 0) isAllIsland = false;if (grid[i][j] == 1) {count = 0;dfs(grid, i, j, visited);getSize.put(mark, count);mark++;}}}int result = 0;if (isAllIsland) result = m * n;// 对标记完的grid继续遍历,判断每个水位置四周是否有岛屿,并记录下四周不同相邻岛屿面积之和// 每次计算完一个水位置周围可能存在的岛屿面积之和,更新下result变量for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {if (grid[i][j] == 0) {set.clear();// 当前水位置变更为岛屿,所以初始化为1int curSize = 1;for (int[] dir : dirs) {int curRow = i + dir[0];int curCol = j + dir[1];if (curRow < 0 || curRow >= m || curCol < 0 || curCol >= n) continue;int curMark = grid[curRow][curCol];// 如果当前相邻的岛屿已经遍历过或者HashMap中不存在这个编号,继续搜索if (set.contains(curMark) || !getSize.containsKey(curMark)) continue;set.add(curMark);curSize += getSize.get(curMark);}result = Math.max(result, curSize);}}}// 打印结果System.out.println(result);}
}
相关文章:

代码随想录打卡|Day45 图论(孤岛的总面积 、沉没孤岛、水流问题、建造最大岛屿)
图论part03 孤岛的总面积 代码随想录链接 题目链接 视频讲解链接 思路:既然某个网格在边界上的岛屿不是孤岛,那么就把非 孤岛的所有岛屿变成海洋,最后再次统计还剩余的岛屿占据的网格总数即可。 dfs: import java.util.Scanner…...

SpringCloud实战:使用Sentinel构建可靠的微服务熔断机制
上篇文章简单介绍了SpringCloud系列Gateway的基本用法以及Demo搭建,今天继续讲解下SpringCloud Gateway实战指南!在分享之前继续回顾下本次SpringCloud的专题要讲的内容: 本教程demo源码已放入附件内 技术准备 读者须知: 本教程…...

张 Prompt Tuning--中文数据准确率提升:理性与冲动识别新突破
Prompt Tuning–中文数据准确率提升:理性与冲动识别新突破 中文数据,准确率 数据标签三类:冲动21,理性21,(中性设为理性40:说明prompt 修正的有效性) 测试数据:冲动4,理性4,中性设为理性10 为了可视化做了 词嵌入 空间的相似文本计算,但是实际当loss 比较小的时…...
MySQL 中 information_schema.processlist 使用原理
一、概念篇:深入理解 processlist 1.1 什么是 information_schema.processlist information_schema.processlist 是 MySQL 提供的一个非常重要的系统视图,它展示了当前 MySQL 服务器中所有正在运行的线程(连接)信息。这个视图对…...
微信小程序学习基础:从入门到精通
文章目录 第一章:微信小程序概述1.1 什么是微信小程序1.2 小程序与原生APP、H5的区别1.3 小程序的发展历程与现状 第二章:开发环境搭建2.1 注册小程序账号2.2 安装开发者工具2.3 开发者工具界面介绍2.4 第一个小程序项目 第三章:小程序框架与…...
如何使用redis做限流(golang实现小样)
在实际开发中,限流(Rate Limiting)是一种保护服务、避免接口被恶意刷流的常见技术。常用的限流算法有令牌桶、漏桶、固定窗口、滑动窗口等。由于Redis具备高性能和原子性操作,常常被用来实现分布式限流。 下面给出使用Golang结合Redis实现简单限流的几种常见方式(以“固定…...
lanqiaoOJ 4185:费马小定理求逆元
【题目来源】 https://www.lanqiao.cn/problems/4185/learning/ 【题目描述】 给出 n,p,求 。其中, 指存在某个整数 0≤a<p,使得 na mod p1,此时称 a 为 n 的逆元,即 。数据保证 p 是质数且 n mod p≠0…...
深度剖析ZooKeeper
1. ZooKeeper架构总览 ZooKeeper 是一个分布式协调服务,广泛用于分布式系统中的配置管理、命名服务、分布式锁和领导选举等场景。以下是对 ZooKeeper 架构、通信机制、容错处理、数据一致性与可靠性等方面的详细剖析。 一、ZooKeeper 主从集群 ZooKeeper 采用 主从…...

深入解析 MySQL 中的 SHOW_ROUTINE 权限
目录 前言 权限作用 授权方法 MySQL8.0.20以上 MySQL8.0.20以下 总结 前言 SHOW_ROUTINE 是 MySQL 中用于控制用户查看存储过程和函数定义的权限。拥有该权限的用户可以通过 SHOW CREATE PROCEDURE 和 SHOW CREATE FUNCTION 等语句查看存储过程和函数的详细定义ÿ…...

电脑网络如何改ip地址?ip地址改不了怎么回事
在日常使用电脑上网时,我们有时会遇到需要更改IP地址的情况,比如访问某些受限制的网站、解决网络冲突问题,或者出于隐私保护的需求。然而,许多用户在尝试修改IP地址时可能会遇到各种问题,例如IP地址无法更改、修改后无…...

打开小程序提示请求失败(小程序页面空白)
1、小程序代码是商城后台下载的还是自己编译的 (1)要是商城后台下载的,检查设置里面的域名是不是https的 (2)要是自己编译的,检查app.js里面的接口域名是不是https的,填了以后有没有保存 注&a…...
C语言速成12之指针:程序如何在内存迷宫里找宝藏?
程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java、鸿蒙、嵌入式、人工智能等开发,专注于程序员成长的那点儿事,希望在成长的路上有你相伴!君志所向,一往无前! 0. 前言:程序如何在内存迷宫里找宝藏? 想象内存是一个巨…...

一张纸决定的高度
从我捧起《格局》这个本书开始,转眼间两个月过去了。 回头望一望,好似还在昨天。 这两个月,心态在变,前进的方向在变,但唯一不变的就是每天晚上睡前,留给自己十分钟的读书时光。 我也从来没想过…...

IP查询基础介绍
IP 查询原理 IP 地址是网络设备唯一标识,IP 查询通过解析 IP 地址获取地理位置、运营商等信息。目前主流的 IPv4(32 位)与 IPv6(128 位)协议,前者理论提供约 43 亿地址,后者地址空间近乎无限。…...

常见的gittee开源项目推荐
https://gitee.com/macrozheng/mall https://doc.ruoyi.vip/ https://eladmin.vip/ https://gitee.com/dromara/RuoYi-Cloud-Plus https://gitee.com/dromara/RuoYi-Vue-Plus https://gitee.com/ZhongBangKeJi/crmeb_java...

日常效率工具【Tools】【持续更新】
日常效率工具【Tools】 VScodevscode原理(居然和Chrome同源)Chromium(Chrome开源版)node.js:让JavaScript可以运行在wab之外的环境 配置文件setting.jesn vscode快捷键万事不求人(Ctrl K,Ctrl S)vscode修改光标所在行的背景色Gene…...
PyTorch中TensorBoardX模块与torch.utils.tensorboard模块的对比分析
文章目录 说明1. 模块起源与开发背景2. 功能特性对比3. 安装与依赖关系4. 性能与使用体验5. 迁移与兼容性策略6. 最佳实践与建议7. 未来展望8. 结论实际相关信息推荐资源 说明 TensorBoard:独立工具,只需安装tensorboard。TensorFlow:非必需…...

数据结构与算法——链式二叉树
链式二叉树 遍历方式与其规则代码的实现递归的复习前,中,后序遍历的实现二叉树结点个数二叉树叶子结点个数二叉树第k层结点个数二叉树的深度/高度二叉树查找值为x的结点二叉树销毁层序遍历 遍历方式与其规则 前序遍历:访问根结点的操作发⽣在…...

Android12 launcher3修改App图标白边问题
Android12 launcher3修改App图标白边问题 1.前言: 今天在Android12 Rom定制客制化系统应用时发现改变系统App图标的形状会出现一个问题,那就是图标被缩小了,没有显示完整,有一个白边,这在普通的App开发很少遇到&…...

【iOS】分类、扩展、关联对象
分类、扩展、关联对象 前言分类扩展扩展和分类的区别关联对象key的几种用法流程 总结 前言 最近的学习中笔者发现自己对于分类、扩展相关知识并不是很熟悉,刚好看源码类的加载过程中发现有类扩展与关联对象详解。本篇我们来探索一下这部分相关知识,首先…...

内蒙古工程系列建设工程技术人才评审条件
关于印发《内蒙古自治区工程系列建设工程专业技术人才职称评审条件》的通知 内蒙古工程系列建设工程技术人才评审条件适用范围 内蒙古工程系列建设工程技术人才评审条件之技术员评审要求 内蒙古工程系列建设工程技术人才评审条件之助理工程师评审要求 内蒙古工程系列建设工程技…...
Elasticsearch超详细安装部署教程(Windows Linux双系统)
文章目录 一、前言二、Windows系统安装部署2.1 环境准备2.2 Elasticsearch安装2.3 安装为Windows服务2.4 Head插件安装2.5 Kibana集成(可选) 三、Linux系统安装部署3.1 环境准备3.2 Elasticsearch安装3.3 系统优化3.4 启动服务3.5 安全配置(可…...
第十六章:数据治理之数据架构:数据模型和数据流转关系
本章我们说一下数据架构,说到数据架构,就很自然的想到企业架构、业务架构、软件架构,因为个人并没有对这些内容进行深入了解,所以这里不做比对是否有相似或者共通的地方,仅仅来说一下我理解的数据架构。 1、什么是架构…...

目标检测DINO-DETR(2023)详细解读
文章目录 对比去噪训练混合查询选择look forward twice 论文全称为:DETR with Improved DeNoising Anchor Boxes for End-to-End Object Detection 提出了三个新的方法: 首先,为了改进一对一的匹配效果,提出了一种对比去噪训练方法…...
基于 STM32 的蔬菜智能育苗系统硬件与软件设计
一、系统总体架构 蔬菜智能育苗系统通过单片机实时采集温湿度、光照等环境数据,根据预设阈值自动控制灌溉、补光、通风等设备,实现育苗环境的智能化管理。系统主要包括以下部分: 主控芯片:STM32F103C8T6(32 位 ARM Cortex-M3 单片机,性价比高,适合嵌入式控制)传感器模…...
实现一个带有授权码和使用时间限制的Spring Boot项目
生成和验证授权码记录授权时间和过期时间实现授权逻辑 以下是具体的实现方法: 1. 生成和验证授权码 可以使用加密技术生成和验证授权码。授权码中可以包含有效期等信息,并使用密钥进行签名。 示例代码: java复制代码 import javax.crypt…...

SGlang 推理模型优化(PD架构分离)
一、技术背景 随着大型语言模型(LLM)广泛应用于搜索、内容生成、AI助手等领域,对模型推理服务的并发能力、响应延迟和资源利用效率提出了前所未有的高要求。与模型训练相比,推理是一个持续进行、资源消耗巨大的任务,尤…...
TuyaOpen横空出世!涂鸦智能如何用开源框架重构AIoT开发范式?
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引子:AIoT开发的“不可能三角”被打破 当AI与物理世界深度融合的浪潮席卷全球,开发者们却始终面临一个“不可能三角”——开发…...

Vue语法【2】
1.插值表达式: 语法规则: {{Vue实例中data的变量名}}使用场景: 插值表达式一般使用在文本内容中,如果是元素的属性内容中则无法使用; 案例: <!DOCTYPE html> <html lang"en"> &l…...

2.2.1 05年T2
引言 本文将从一预习、二自习、三学习、四复习等四个阶段来分析2005年考研英语阅读第二篇文章。为了便于后续阅读,我将第四部分复习放在了首位。 四、复习 方法:错误思路分析总结考点文章梳理 4.1 错题分析 题目:26(细节题&…...