当前位置: 首页 > news >正文

代码随想录算法训练营Day57 | 卡玛网 101.孤岛的总面积、卡玛网 102.沉没孤岛、卡玛网 103. 水流问题、卡玛网 104.建造最大岛屿

目录

卡玛网 101.孤岛的总面积

卡玛网 102.沉没孤岛

卡玛网 103. 水流问题

卡玛网 104.建造最大岛屿

卡玛网 101.孤岛的总面积

题目

101. 孤岛的总面积

思路

代码随想录:101.孤岛的总面积

重点: 首先遍历图的四条边,把其中的陆地及其位于的岛屿都记录为 0,然后再遍历整张地图,并开始计算面积。

题解

DFS:

import java.util.*;public class Main {private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};public static void main(String[] args) {Scanner 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();}}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if ((i == 0 || j == 0 || i == N - 1 || j == M - 1) && graph[i][j] == 1)dfs(graph, i, j, N, M);}}int totalArea = 0;for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (graph[i][j] == 1)totalArea += dfs(graph, i, j, N, M);}}System.out.println(totalArea);}private static int dfs(int[][] graph, int x, int y, int N, int M) {if (x < 0 || y < 0 || x >= N || y >= M || graph[x][y] != 1)return 0;graph[x][y] = 0;int area = 1;for (int i = 0; i < 4; i++) {int nextX = x + DIR[i][0];int nextY = y + DIR[i][1];area += dfs(graph, nextX, nextY, N, M);}return area;}
}

BFS:

import java.util.*;public class Main {private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};public static void main(String[] args) {Scanner 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();}}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if ((i == 0 || j == 0 || i == N - 1 || j == M - 1) && graph[i][j] == 1)bfs(graph, i, j, N, M);}}int totalArea = 0;for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (graph[i][j] == 1)totalArea += bfs(graph, i, j, N, M);}}System.out.println(totalArea);}private static int bfs(int[][] graph, int x, int y, int N, int M) {Deque<int[]> deque = new LinkedList<>();deque.offer(new int[]{x, y});graph[x][y] = 0;int area = 1;while (!deque.isEmpty()) {int[] cur = deque.poll();int curX = cur[0];int curY = cur[1];for (int i = 0; i < 4; i++) {int nextX = curX + DIR[i][0];int nextY = curY + DIR[i][1];if (nextX < 0 || nextY < 0 || nextX >= N || nextY >= M || graph[nextX][nextY] != 1)continue;graph[nextX][nextY] = 0;area++;deque.offer(new int[]{nextX, nextY});}}return area;}
}

卡玛网 102.沉没孤岛

题目

102. 沉没孤岛

思路

代码随想录:102.沉没孤岛

img

题解

DFS:

import java.util.*;public class Main {private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};public static void main(String[] args) {Scanner 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();}}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if ((i == 0 || j == 0 || i == N - 1 || j == M - 1) && graph[i][j] == 1)dfs(graph, i, j, N, M);}}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (graph[i][j] == 2) {System.out.print(1 + " ");} else {System.out.print(0 + " ");}}System.out.println();}}private static void dfs(int[][] graph, int x, int y, int N, int M) {if (x < 0 || y < 0 || x >= N || y >= M || graph[x][y] != 1)return;graph[x][y] = 2;for (int i = 0; i < 4; i++) {int nextX = x + DIR[i][0];int nextY = y + DIR[i][1];dfs(graph, nextX, nextY, N, M);}}
}

BFS:

import java.util.*;public class Main {private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};public static void main(String[] args) {Scanner 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();}}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if ((i == 0 || j == 0 || i == N - 1 || j == M - 1) && graph[i][j] == 1)bfs(graph, i, j, N, M);}}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (graph[i][j] == 2) {System.out.print(1 + " ");} else {System.out.print(0 + " ");}}System.out.println();}}private static void bfs(int[][] graph, int x, int y, int N, int M) {Deque<int[]> deque = new LinkedList<>();deque.offer(new int[]{x, y});graph[x][y] = 2;while (!deque.isEmpty()) {int[] cur = deque.poll();int curX = cur[0];int curY = cur[1];for (int i = 0; i < 4; i++) {int nextX = curX + DIR[i][0];int nextY = curY + DIR[i][1];if (nextX < 0 || nextY < 0 || nextX >= N || nextY >= M || graph[nextX][nextY] != 1)continue;graph[nextX][nextY] = 2;deque.offer(new int[]{nextX, nextY});}}}
}

卡玛网 103. 水流问题

题目

103. 水流问题

思路

代码随想录:103.水流问题

初步思路是遍历图中的所有点,判断是否能同时到达第一边界和第二边界,时间复杂度为 O(N2 * M2),超时。

优化方案:逆向思维,分别从第一边界和第二边界逆流而上,将能到达的节点进行标记,最后两边都标记了的节点就是目标节点。

img img

题解

DFS:

import java.util.*;public class Main {private static final int[][] DIR = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};public static void main(String[] args) {Scanner 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();}}boolean[][] firstVisited = new boolean[N][M];boolean[][] secondVisited = new boolean[N][M];for (int i = 0; i < N; i++) {dfs(graph, i, 0, firstVisited);//从左边界开始dfs(graph, i, M - 1, secondVisited);//从右边界开始}for (int j = 0; j < M; j++) {dfs(graph, 0, j, firstVisited);//从上边界开始dfs(graph, N - 1, j, secondVisited);//从下边界开始}for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (firstVisited[i][j] && secondVisited[i][j]) {System.out.print(i + " ");System.out.println(j);}}}}private static void dfs(int[][] graph, int x, int y, boolean[][] visited) {if (x < 0 || y < 0 || x >= graph.length || y >= graph[0].length || 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 >= graph.length || nextY >= graph[0].length || visited[nextX][nextY] || graph[nextX][nextY] < graph[x][y])continue;dfs(graph, nextX, nextY, visited);}}
}

卡玛网 104.建造最大岛屿

题目

104. 建造最大岛屿

思路

代码随想录:104.建造最大岛屿

  1. 第一次遍历地图,得出各个岛屿的面积,并做独立的编号,记录在HashMap中,key 为岛屿编号,value 为岛屿面积。
  2. 第二次遍历地图,遍历为 0 的方格,将其变为 1,并统计该方格周边的岛屿面积,将其相邻面积加在一起,得到新建的岛屿面积。
  3. 遍历所有 0 之后,可以得到最大面积。
img img img

题解

import java.util.*;public class Main {// 定义四个方向static int[][] DIR = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};static int mark = 2;  // 标记岛屿编号,初始值为2(0代表水,1代表未标记的岛屿)public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt();int M = sc.nextInt();int[][] grid = new int[N][M];for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {grid[i][j] = sc.nextInt();}}//记录岛屿编号以及面积HashMap<Integer, Integer> islandSizeMap = new HashMap<>();//判断是否全为陆地boolean isAllIsland = true;// 标记每片岛屿并记录面积for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (grid[i][j] == 0) {isAllIsland = false;} else if (grid[i][j] == 1) {int currentArea = dfs(grid, i, j);islandSizeMap.put(mark, currentArea);mark++;}}}//如果全为陆地,直接返回总面积int result = isAllIsland ? N * M : 0;// 遍历每个水格子,计算可能的最大岛屿面积for (int i = 0; i < N; i++) {for (int j = 0; j < M; j++) {if (grid[i][j] == 0) {HashSet<Integer> set = new HashSet<>();int newArea = 1;// 计算周围的不同岛屿面积之和for (int[] dir : DIR) {int newX = i + dir[0];int newY = j + dir[1];if (newX < 0 || newX >= N || newY < 0 || newY >= M) {continue;}int currentMark = grid[newX][newY];if (currentMark > 1 && !set.contains(currentMark)) {set.add(currentMark);newArea += islandSizeMap.get(currentMark);}}result = Math.max(result, newArea);}}}System.out.println(result);}// DFSprivate static int dfs(int[][] grid, int x, int y) {if (x < 0 || x >= grid.length || y < 0 || y >= grid[0].length || grid[x][y] != 1) {return 0;}grid[x][y] = mark;int area = 1;for (int[] dir : DIR) {area += dfs(grid, x + dir[0], y + dir[1]);}return area;}
}

相关文章:

代码随想录算法训练营Day57 | 卡玛网 101.孤岛的总面积、卡玛网 102.沉没孤岛、卡玛网 103. 水流问题、卡玛网 104.建造最大岛屿

目录 卡玛网 101.孤岛的总面积 卡玛网 102.沉没孤岛 卡玛网 103. 水流问题 卡玛网 104.建造最大岛屿 卡玛网 101.孤岛的总面积 题目 101. 孤岛的总面积 思路 代码随想录&#xff1a;101.孤岛的总面积 重点&#xff1a; 首先遍历图的四条边&#xff0c;把其中的陆地及…...

美团代付微信小程序系统 read.php 任意文件读取漏洞复现

0x01 产品简介 美团代付微信小程序系统是美团点评旗下的一款基于微信小程序技术开发的应用程序功能之一,它允许用户方便快捷地请求他人为自己支付订单费用。随着移动支付的普及和微信小程序的广泛应用,美团作为中国领先的本地生活服务平台,推出了代付功能,以满足用户多样化…...

Windows安装tensorflow的GPU版本

前言 首先本文讨论的是windows系统&#xff0c;显卡是英伟达&#xff08;invida&#xff09;如何安装tensorflow-gpu。一共需要安装tensorflow-gpu、cuDNN、CUDA三个东西。其中CUDA是显卡的驱动库&#xff0c;cuDNN是深度学习加速库。 安装开始前&#xff0c;首先需要安装好c…...

2021-04-22 51单片机玩转点阵

理论就不赘述了,网络上多得很,直接从仿真软件感性上操作认识点阵,首先打开ISIS仿真软件,放置一个点阵和电源与地线就可以开始了;由点阵任何一脚连线到地线,另一边对应的引脚就连接到电源,如图:点击运行看是否点亮?看到蓝色与红色的点表示电源正常但是没有任何亮点,这时对调一下…...

lua入门教程:数字

在Lua中&#xff0c;数字&#xff08;number&#xff09;是一种基本数据类型&#xff0c;用于表示数值。以下是对Lua中数字的详细教程&#xff1a; 一、数字类型概述 Lua中的数字遵循IEEE 754双精度浮点标准&#xff0c;可以表示非常大的正数和负数&#xff0c;以及非常小的正…...

[CKS] K8S ServiceAccount Set Up

最近准备花一周的时间准备CKS考试&#xff0c;在准备考试中发现有一个题目关于Rolebinding的题目。 Question 1 The buffy Pod in the sunnydale namespace has a buffy-sa ServiceAccount with permissions the Pod doesn’t need. Modify the attached Role so that it onl…...

QML:Menu详细使用方法

目录 一.性质 二.作用 三.方法 四.使用 1.改变标签 2.打开本地文件 3.退出程序 4.打开Dialog 五.效果 六.代码 在 QML 中&#xff0c;Menu 是一个用于创建下拉菜单或上下文菜单的控件。它通常由多个 MenuItem 组成&#xff0c;每个 MenuItem 可以包含文本、图标和快捷…...

时间复杂度和空间复杂度 part2

一&#xff0c;空间复杂度 空间复杂度是衡量一个算法在执行过程中所需内存空间的量度。它反映了算法随着输入数据规模&#xff08;通常是 nn&#xff09;的增加&#xff0c;所消耗的内存量如何变化。空间复杂度是分析算法效率的一个重要方面&#xff0c;尤其是在内存资源有限的…...

【电机控制器】STC8H1K芯片——UART串口通信

【电机控制器】STC8H1K芯片——UART串口通信 文章目录 [TOC](文章目录) 前言一、UART1.串口初始化2.串口中断3.发送一个字节 二、实验1.原理图2.实验现象 三、参考资料总结 前言 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、UART 1.串口初始化 …...

STM32移植RT-Thread---时钟管理

一RTT时钟节拍概念 RT-Thread的时钟节拍&#xff08;Tick&#xff09;是操作系统用于管理时间和任务调度的一个基本单位。它在实时操作系统中尤为关键&#xff0c;用于实现任务的延时、超时管理等功能。以下是关于RT-Thread时钟节拍的简单说明&#xff1a; 1.Tick定义&#x…...

Jasypt 实现 yml 配置加密

文章目录 前言一、集成 Jasypt1. pom 依赖2. yml 依赖 3. 加密工具类3. 使用二、常见问题1. application.yml 失效问题2. 配置热更新失败问题 前言 jasypt 官方地址&#xff1a;https://github.com/ulisesbocchio/jasypt-spring-boot Jasypt可以为Springboot加密的信息很多&a…...

uniapp—android原生插件开发(2原生插件开发)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; ***环境问题移步至&#xff1a;uniapp—an…...

NLP之ASR之moonshine:moonshine的简介、安装和使用方法、案例应用之详细攻略

NLP之ASR之moonshine&#xff1a;moonshine的简介、安装和使用方法、案例应用之详细攻略 目录 moonshine的简介 moonshine的安装和使用方法 1、安装 推荐使用uv管理Python环境 安装Moonshine包 Torch后端 TensorFlow后端 JAX后端 ONNX运行时 2、使用方法 0、测试 1…...

albert模型实现微信公众号虚假新闻分类

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…...

OceanBase 应用实践:如何处理数据空洞,降低存储空间

问题描述 某保险行业客户的核心系统&#xff0c;从Oracle 迁移到OceanBase之后&#xff0c;发现数据存储空间出现膨胀问题&#xff0c;数据空间 datasize9857715.48M&#xff0c;实际存储占用空间17790702.00M。根据 required_mb - data_mb 值判断&#xff0c;数据空洞较为严重…...

计算机的错误计算(一百四十八)

摘要 本节探讨 MATLAB 中 附近数的正割函数与 附近数的余割函数的计算精度问题。 例1. 已知 计算 直接贴图吧&#xff1a; 另外&#xff0c;16位的正确值分别为 0.4105556037464873e9、0.3670813182326778e13、-0.2549029285657875e8 与 -0.1248777628817462e12&am…...

MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解

行级锁&#xff0c;每次操作锁住对应的行数据。锁定粒度最小&#xff0c;发生锁冲突的概率最低&#xff0c;并发度最高。 应用在InnoDB存储引擎中。InnoDB的数据是基于索引组织的&#xff0c;行锁是通过对索引上的索引项加锁来实现的&#xff0c;而不是对记录加的锁。 对于行…...

SLM401A系列42V商业照明线性恒流芯片 线性照明调光在LED模组及灯带智能球泡灯上应用

SLM401A系列型号选型&#xff1a; SLM401A10ED-7G:QFN1010-4 SLM401A15aa-7G:SOT23-3 SLM401A20aa-7G:SOT23-3 SLM401A20ED-7G:QFN1010-4 SLM401A25aa-7G:SOT23-3 SLM401A30aa-7G:SOT23-3 SLM401A40aa-7G:SOT23-3 SLM401A50aa-7G:SOT23-3 SLM401A6…...

京东零售推荐系统可解释能力详解

作者&#xff1a;智能平台 张颖 本文导读 本文将介绍可解释能力在京东零售推荐系统中的应用实践。主要内容包括以下几大部分&#xff1a;推荐系统可解释定义、系统架构、排序可解释、模型可解释、流量可解释。 推荐系统可解释定义 推荐系统可解释的核心包括三部分&#xff0…...

蓝桥杯 懒洋洋字符串--字符串读入

题目 代码 #include <iostream>using namespace std;int main(){int n;cin>>n;char s[210][4];int ans0;for(int i0;i<n;i){scanf("%s",s[i]);}for(int i0;i<n;i){char as[i][0];char bs[i][1];char cs[i][2];// cout<<a<< <<b…...

业务系统对接大模型的基础方案:架构设计与关键步骤

业务系统对接大模型&#xff1a;架构设计与关键步骤 在当今数字化转型的浪潮中&#xff0c;大语言模型&#xff08;LLM&#xff09;已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中&#xff0c;不仅可以优化用户体验&#xff0c;还能为业务决策提供…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...

ubuntu22.04 安装docker 和docker-compose

首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

Kafka深度解析与原理剖析

文章目录 一、Kafka核心架构原理1. **分布式协调与选举**2. **ISR、OSR与HW机制**3. **高性能存储设计**4. **刷盘机制 (Flush)**5. **消息压缩算法**二、高可用与消息可靠性保障1. **数据高可用策略**2. **消息丢失场景与规避**3. **顺序消费保证**三、Kafka高频面试题精析1. …...