代码随想录算法训练营第五十七天 | 101. 孤岛的总面积 102. 沉没孤岛 103. 水流问题 104.建造最大岛屿
101. 孤岛的总面积
题目链接:KamaCoder
文档讲解:代码随想录
状态:AC
Java代码:
import java.util.*;class Main {static int count = 0;static int res = 0;static boolean island = true;public static int[][] dir = new int[][]{{1, 0}, {0, 1}, {-1, 0}, {0, -1}};public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int m = scan.nextInt();int[][] arr = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {arr[i][j] = scan.nextInt();}}scan.close();boolean[][] visited = new boolean[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (arr[i][j] == 1 && !visited[i][j]) {visited[i][j] = true;count++;dfs(arr, visited, i, j);if (island) {res += count;}island = true;count = 0;}}}System.out.println(res);}public static void dfs(int[][] arr, boolean[][] visited, int x, int y) {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 >= arr.length || nextY >= arr[0].length) {island = false;continue;}if (arr[nextX][nextY] == 1 && !visited[nextX][nextY]) {visited[nextX][nextY] = true;count++;dfs(arr, visited, nextX, nextY);}}}
}
102. 沉没孤岛
题目链接:KamaCoder
文档讲解:代码随想录
状态:AC
Java代码:
import java.util.*;class Main {public static int[][] dir = new int[][]{{1, 0}, {0, 1}, {-1, 0}, {0, -1}};public static void dfs(int[][] arr, int x, int y) {arr[x][y] = 2;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 >= arr.length || nextY >= arr[0].length) {continue;}if (arr[nextX][nextY] == 1) {dfs(arr, nextX, nextY);}}}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int m = scan.nextInt();int[][] arr = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {arr[i][j] = scan.nextInt();}}scan.close();for (int i = 0; i < n; i++) {if (arr[i][0] == 1) {dfs(arr, i, 0);}if (arr[i][m - 1] == 1) {dfs(arr, i, m - 1);}}for (int i = 0; i < m; i++) {if (arr[0][i] == 1) {dfs(arr, 0, i);}if (arr[n - 1][i] == 1) {dfs(arr, n - 1, i);}}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (arr[i][j] == 1) {arr[i][j] = 0;} else if (arr[i][j] == 2) {arr[i][j] = 1;}System.out.print(arr[i][j]);if (j == m - 1) {System.out.print("\n");} else {System.out.print(" ");}}}}
}
103. 水流问题
题目链接:KamaCoder
文档讲解:代码随想录
状态:AC
Java代码:
import java.util.*;class Main {public static int[][] dir = new int[][]{{1, 0}, {0, 1}, {-1, 0}, {0, -1}};public static void dfs(int[][] arr, boolean[][] visited, int x, int y, int height) {// 如果已访问,直接返回if (visited[x][y]) {return;}// 标记当前节点为已访问visited[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 < arr.length && nextY < arr[0].length&& arr[nextX][nextY] >= height) {dfs(arr, visited, nextX, nextY, arr[nextX][nextY]);}}}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int m = scan.nextInt();int[][] arr = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {arr[i][j] = scan.nextInt();}}scan.close();boolean[][] first = new boolean[n][m];boolean[][] second = new boolean[n][m];for (int i = 0; i < n; i++) {dfs(arr, first, i, 0, arr[i][0]);dfs(arr, second, i, m - 1, arr[i][m - 1]);}for (int i = 0; i < m; i++) {dfs(arr, first, 0, i, arr[0][i]);dfs(arr, second, n - 1, i, arr[n - 1][i]);}for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (first[i][j] && second[i][j]) {System.out.println(i + " " + j);}}}}
}
104.建造最大岛屿
题目链接:KamaCoder
文档讲解:代码随想录
状态:AC
Java代码:
import java.util.*;class Main {public static int count = 0;public static int[][] dir = new int[][]{{0, 1}, {1, 0}, {0, -1}, {-1, 0}};public static void dfs(int[][] arr, boolean[][] visited, int x, int y, int mark) {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 >= arr.length || nextY >= arr[0].length || visited[nextX][nextY]) {continue;}if (arr[nextX][nextY] == 1) {count++;arr[nextX][nextY] = mark;visited[nextX][nextY] = true;dfs(arr, visited, nextX, nextY, mark);}}}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int n = scan.nextInt();int m = scan.nextInt();int[][] arr = new int[n][m];boolean[][] visited = new boolean[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {arr[i][j] = scan.nextInt();}}scan.close();Map<Integer, Integer> map = new HashMap<>();int mark = 2;boolean isAll = true;for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (arr[i][j] == 0) {isAll = false;}if (arr[i][j] == 1 && !visited[i][j]) {arr[i][j] = mark;visited[i][j] = true;count++;dfs(arr, visited, i, j, mark);map.put(mark, count);count = 0;mark++;}}}if (isAll) {System.out.println(m * n);return;}int value = 0;int res = 0;Set<Integer> set = new HashSet<>();for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (arr[i][j] == 0) {set.clear();value = 0;for (int z = 0; z < 4; z++) {int nextX = i + dir[z][0];int nextY = j + dir[z][1];if (nextX < 0 || nextY < 0 || nextX >= arr.length || nextY >= arr[0].length) {continue;}if (map.containsKey(arr[nextX][nextY]) && !set.contains(arr[nextX][nextY])) {set.add(arr[nextX][nextY]);value += map.get(arr[nextX][nextY]);}}res = Math.max(res, value);}}}System.out.println(res + 1);}
}
相关文章:

代码随想录算法训练营第五十七天 | 101. 孤岛的总面积 102. 沉没孤岛 103. 水流问题 104.建造最大岛屿
101. 孤岛的总面积 题目链接:KamaCoder 文档讲解:代码随想录 状态:AC Java代码: import java.util.*;class Main {static int count 0;static int res 0;static boolean island true;public static int[][] dir new int[][]{…...

llamafactory大模型微调教程(周易大模型案例)
1.环境说明 操作系统:ubuntu 20 基础模型:Qwen2.5-1.5B-Instruct 工具:llamafactory GPU:四张4090 2、环境部署 2.1 下载基础模型 # 1、下载 modelscope pip install modelscope#2、模型下载 cd /data/ cat >> download…...

excel 斜向拆分单元格
右键-合并单元格 右键-设置单元格格式-边框 在设置好分割线后,你可以开始输入文字。 需要注意的是,文字并不会自动分成上下两行。 为了达到你期望的效果,你可以通过 同过左对齐、上对齐 空格键或使用【AltEnter】组合键来调整单元格中内容的…...

【JAVA架构师成长之路】【JVM实战】第2集:生产环境内存飙高排查实战
课程标题:生产环境内存飙高排查实战——从堆转储到代码修复的15分钟指南 目标:掌握内存泄漏与OOM问题的系统性排查方法,快速定位代码或配置缺陷 0-1分钟:问题引入与核心现象 线上服务内存持续增长,触发频繁Full GC甚至OOM(OutOfMemoryError),导致服务崩溃。常见诱因:…...

MATLAB实现遗传算法优化风电_光伏_光热_储热优化
1. 问题定义 目标:最小化输出负荷与需求负荷的偏差平方和。决策变量:每个时间步长的风电、光伏、光热和储热输出功率。约束条件: 风电、光伏、光热的输出功率不得超过其最大容量。储热系统的输出功率(充放电)不得超过…...

JCRQ1河马算法+四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测
JCRQ1河马算法四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测 目录 JCRQ1河马算法四模型对比!HO-CNN-GRU-Attention系列四模型多变量时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 基于HO-CNN-GRU-Attention、CNN-GRU-Attent…...

react中的fiber和初次渲染
源码中定义了不同类型节点的枚举值 组件类型 文本节点HTML标签节点函数组件类组件等等 src/react/packages/react-reconciler/src/ReactWorkTags.js export const FunctionComponent 0; export const ClassComponent 1; export const IndeterminateComponent 2; // Befo…...

LLM 大模型基础认知篇
目录 1、基本概述 2、大模型工作原理 3、关键知识点 (1)RAG 知识库 (2)蒸馏 (3)微调 (4)智能体 1、基本概述 大型语言模型(Large Language Model, LLM)…...

leetcode700-二叉搜索树中的搜索
leetcode 700 思路 我们需要先了解一下二叉搜索树的特性: 左子树的所有节点值 < 当前节点的值。右子树的所有节点值 > 当前节点的值。这个特性适用于树中的每个节点 那么根据这个特性,我们可以通过根节点的值和目标值的大小来判断后序的走向&…...

《MySQL三大核心日志解析:Undo Log/Redo Log/Bin Log对比与实践指南》
MySQL三大核心日志解析:Undo Log/Redo Log/Bin Log对比与实践指南 一、核心日志全景概览 在MySQL数据库体系中,Undo Log、Redo Log和Bin Log构成了事务处理和数据安全的三大基石。这三大日志各司其职,协同保障了数据库的ACID特性与高可用架…...

java中实体类常见的设计模式
实体类常见的设计模式 1. Set 链式编程 在实体类中实现链式调用通常是指让 setter 方法返回当前对象实例(this),从而允许连续调用多个 setter 方法设置属性值。这种方式可以使代码更加简洁和直观。 例如实体类为: public clas…...

【够用就好006】如何从零开发游戏上架steam面向AI编程的godot独立游戏制作实录001流程
记录工作实践 这是全新的系列,一直有个游戏制作梦 感谢AI时代,让这一切变得可行 长欢迎共同见证,期更新,欢迎保持关注,待到游戏上架那一天,一起玩 面向AI编程的godot独立游戏制作流程实录001 本期是第…...

发行思考:全球热销榜的频繁变动
几点杂感: 1、单机游戏销量与在线人数的衰退是剧烈的,有明显的周期性,而在线游戏则稳定很多。 如去年的某明星游戏,最高200多万在线,如今在线人数是48名,3万多。 而近期热门的是MH,在线人数8…...

docker目录挂载与卷映射的区别
在 Docker 中,目录挂载(Bind Mount)和卷映射(Volume Mount)的命令语法差异主要体现在路径格式上,具体表现为是否以斜杠(/)开头。以下是两者的核心区别及使用场景的总结: …...

`label` 标签的 `for` 属性详解
一、基本概念 label 标签的 for 属性用于将标签与表单控件(如 input、select 等)绑定,其值需与目标元素的 id 完全匹配。这种关联允许用户点击标签时触发控件交互(如聚焦输入框或切换复选框),提升操作便捷…...

公开笔记:自然语言处理(NLP)中文文本预处理主流方法
在自然语言处理(NLP)领域,将中文文本转化为数字的主流方法主要集中在预训练语言模型和子词编码技术上。这些方法能够更好地捕捉语义信息,并且在各种NLP任务中表现出色。以下是目前主流的文本编码方法: 1. 基于预训练语…...

【一个月备战蓝桥算法】递归与递推
字典序 在刷题和计算机科学领域,字典序(Lexicographical order)也称为词典序、字典顺序、字母序,是一种对序列元素进行排序的方式,它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序: …...

算法策略深度解析与实战应用
一、算法策略的本质与价值 算法策略是计算机科学的灵魂,它决定了问题解决的效率与质量。优秀的算法设计者就像战场上的指挥官,需要根据地形(问题特征)选择最佳战术(算法策略)。本文将深入剖析五大核心算法…...

【LeetCode 热题 100】3. 无重复字符的最长子串 | python 【中等】
美美超过管解 题目: 3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。 注…...

计算机网络(1) 网络通信基础,协议介绍,通信框架
网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号,也即MAC地址,也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 (每一个数可以用四个…...

在 Docker 中,无法直接将外部多个端口映射到容器内部的同一个端口
Docker 的端口映射是一对一的,即一个外部端口只能映射到容器内部的一个端口。 1. 为什么不能多对一映射? 端口冲突: 如果外部多个端口映射到容器内部的同一个端口,Docker 无法区分外部请求应该转发到哪个内部端口,会…...

计算机网络开发(2)TCP\UDP区别、TCP通信框架、服务端客户端通信实例
TCP与UDP区别 UDP:用户数据报协议,面向无连接,可以单播,多播,广播, 面向数据报,不可靠TCP:传输控制协议,面向连接的,可靠的,基于字节流ÿ…...

ubuntu打包 qt 程序,不用每次都用linuxdeployqt打包
用linuxdeployqt打包太麻烦,每次程序编译都要用linuxdeployqt打包一次,而且每次都要很长时间,通过研究得出一个新的打包方法 1.用用linuxdeployqt得出依赖的库文件(只要没有增加新模块,只要用一次就可以) …...

【Python项目】基于深度学习的车辆特征分析系统
【Python项目】基于深度学习的车辆特征分析系统 技术简介:采用Python技术、MySQL数据库、卷积神经网络(CNN)等实现。 系统简介:该系统基于深度学习技术,特别是卷积神经网络(CNN),用…...

C++(初阶)(二)——类和对象
类和对象 类和对象类的定义格式访问限定符类域 实例化实例化概念内存对齐 this指针 类的定义 类(Class)是一种用于创建对象的蓝图或模板。它定义了对象(变量)的属性(数据)和方法(行为ÿ…...

JS—组成:2分钟掌握什么是ECMAScript操作,什么是DOM操作,什么是BOM操作
个人博客:haichenyi.com。感谢关注 1. 目录 1–目录2–组成3–内置对象 2. 组成 一直都在说JS,JS,到底啥是JS有了解过吗?JS由哪几部分组成的呢? 定义: JavaScript是一种轻量级、解释型或即时编译型的编程语…...

ArcGIS操作:10 投影坐标系转地理坐标系
应用情景:在计算shp面质心坐标的时,由于需要的坐标是经纬度,所以需要将投影坐标系转化为地理坐标系 1、打开工具箱 2、右侧:数据管理工具 → 投影和变换 → 要素 → 投影 3、选择投影的数据、输出路径、地理坐标系,点…...

NVIDIA Jetson Nano的国产替代,基于算能BM1684X+FPGA+AI算力盒子,支持deepseek边缘部署
NVIDIA Jetson Nano的国产替代,基于算能BM1684X的AI算力盒子,支持deepseek边缘部署 另外,还提供BM1684XFPGAAI的解决方案。 核心板基于Sophon SG2300X SoC(也叫BM1684X)打造 带有8核ARM Cortex-A53 2.3GHz,…...

c++全排列
题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列,每行一个序列。 每个数字保留 5 个场…...

VSCode 配置优化指南:打造极致高效的前端开发环境
VSCode 配置优化指南:打造极致高效的前端开发环境 一、基础环境配置:让开发更流畅 1. 性能优化设置 // settings.json {"files.autoSave": "afterDelay", // 自动保存(延迟1秒)"files.exclud…...