代码随想录算法训练营第五十七天 | 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 (每一个数可以用四个…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Linux nano命令的基本使用
参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...
