代码随想录Day53|102.沉没孤岛 、103.水流问题 、104.建造最大岛屿
102.沉没孤岛
import java.util.*;class Main{public static 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[][] grid = new int[n][m];for(int i = 0; i <n; i++){for(int j = 0; j<m; j++){grid[i][j] = sc.nextInt();}}boolean[][] visited = new boolean[n][m];for(int i = 0; i < n; i++){if(grid[i][0] == 1 && visited[i][0] == false){dfs(grid,visited,i,0);}if(grid[i][m-1] == 1 && visited[i][m-1] == false){dfs(grid,visited,i,m-1);}}//遍历上下边界for(int j = 0; j <= m-1; j++){if(grid[0][j] == 1 && visited[0][j] == false){dfs(grid,visited,0,j);}if(grid[n-1][j] == 1 && visited[n-1][j] == false){dfs(grid,visited,n-1,j);}}for(int i = 0; i < n; i++){for(int j = 0; j< m; j++){if(grid[i][j] == 1) grid[i][j] = 0;if(grid[i][j] == 2) grid[i][j] = 1;}}for(int i = 0; i < n; i++ ){for(int j = 0; j< m; j++){System.out.print(grid[i][j]+" ");}System.out.println();}}public static void dfs(int[][] grid, boolean[][] visited, int x,int y){if(visited[x][y] == true || grid[x][y] == 0){return;}grid[x][y] = 2;visited[x][y] = true;for(int i = 0; i<4; i++){int nextX = x + dir[i][0];int nextY = y + dir[i][1];if(nextY < 0 || nextY >= grid[0].length || nextX < 0 || nextX >= grid.length){continue;}dfs(grid,visited,nextX,nextY);}}
}
103.水流问题
import java.util.*;class Main{public static int[][] dir = {{1,0},{0,1},{-1,0},{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();}}//初始化边界boolean[][] firstBound = new boolean[n][m],secondBound = new boolean[n][m];//遍历左边界和有边界for(int i = 0; i < n; i++){dfs(grid,i,0,firstBound);dfs(grid,i,m-1,secondBound);}//遍历上边界和下边界for(int i = 0; i <m; i++){dfs(grid,0,i,firstBound);dfs(grid,n-1,i,secondBound);}for(int i = 0; i < n; i++){for(int j = 0; j < m; j++){if(firstBound[i][j] && secondBound[i][j]){System.out.println(i+" " + j);}}}}public static void dfs(int[][] grid,int x,int y,boolean[][] visited){//不能放在遍历里面,否则刚进来第一组没办法变成truevisited[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.length || nextY < 0 || nextY >= grid[0].length || grid[nextX][nextY] < grid[x][y] ||visited[nextX][nextY]){continue;}dfs(grid,nextX,nextY,visited);}}
}
104.建造最大岛屿
import java.util.*;class Main{public static int[][] dirs = {{1,0},{0,1},{-1,0},{0,-1}};static int count = 0;static int tag = 2;public static void main (String[] args) {/* code */Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] grid = new int[n][m];boolean[][] visited = new boolean[n][m];for(int i = 0; i< n; i++){for(int j = 0; j< m; j++){grid[i][j] = sc.nextInt();}}boolean totalIsland = true;//遍历记录面积Map<Integer,Integer> countArea = new HashMap<>();for(int i = 0; i<n; i++){for(int j = 0; j< m; j++){if(grid[i][j] == 0) totalIsland = false;if( !visited[i][j] && grid[i][j] != 0){count = 0;dfs(grid,visited,i,j);countArea.put(tag++,count);}}}/*/打印数组for(int i = 0; i< n; i++){for(int j = 0; j< m; j++){System.out.print(grid[i][j] + " ");}System.out.println();}//*/int res = 1;HashSet<Integer> island = new HashSet<>();int flag = 0;//再次遍历添加小岛for(int i = 0; i<n; i++){for(int j = 0; j< m; j++){if(grid[i][j] == 0){int area = 1;island.clear();for(int dir[]:dirs){int nextX = i + dir[0];int nextY = j + dir[1];if(nextX < 0 || nextX >= grid.length || nextY < 0|| nextY >= grid[0].length) continue;flag =grid[nextX][nextY];if(!island.contains(flag) && countArea.containsKey(flag)){area+=countArea.get(flag);island.add(flag);}}res = Math.max(area,res);}}}if(totalIsland == false){System.out.println(res);}else{System.out.println(m*n);}}public static void dfs(int[][] grid, boolean[][] visited, int x, int y){visited[x][y] = true;grid[x][y] = tag;count++;for(int[] dir: dirs){int nextX = x + dir[0];int nextY = y + dir[1];if(nextX < 0 || nextX >= grid.length || nextY < 0|| nextY >= grid[0].length || visited[nextX][nextY] || grid[nextX][nextY] == 0){continue;}dfs(grid, visited, nextX, nextY);}}
}
相关文章:
代码随想录Day53|102.沉没孤岛 、103.水流问题 、104.建造最大岛屿
102.沉没孤岛 import java.util.*;class Main{public static 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[][] grid new int[n][m];for(int i 0…...
19c-pfile
经常需要rman恢复测试,创建一个单机pfile,需要时手动修改使用,以20g内存为例 orcl.__data_transfer_cache_size0 orcl.__db_cache_size13824425984 orcl.__inmemory_ext_roarea0 orcl.__inmemory_ext_rwarea0 orcl.__java_pool_size0 orcl._…...
智能软件开启精准品牌控价
在当今竞争激烈的商业世界中,品牌的价值如同璀璨的明珠,需要精心呵护。而价格管控,则是守护这颗明珠的关键防线。 当面对众多的产品和 SKU 时,传统的人力监测已显得力不从心。此时,力维网络自主开发的数据监测系统如同…...
OpenCV特征检测(8)检测图像中圆形的函数HoughCircles()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在灰度图像中使用霍夫变换查找圆形。 该函数使用霍夫变换的一种修改版本在灰度图像中查找圆形。 例子: #include <opencv2/imgp…...
spark 大表与大表join时的Shuffle机制和过程
在 Spark 中,当处理大表与大表的 JOIN 操作时,通常会涉及到 Shuffle 机制,这是分布式计算中用于重新分布数据的关键步骤。Shuffle 的本质是将数据按照某种方式重新分组,使得相同 key 的数据能够被发送到同一个计算节点进行后续的操…...
大厂面试真题:简单说下Redis的bigkey
什么是bigkey bigkey是指key对应的value所占的内存空间比较大,例如一个字符串类型的value可以最大存到512MB,一个列表类型的value最多可以存储23-1个元素。 如果按照数据结构来细分的话,一般分为字符串类型bigkey和非字符串类型bigkey。 字…...
18 vue3之自动引入ref插件深入使用v-model
自动引入插件后无需再引入ref等 使用自动引入插入无需在import { ref, reactive } from "vue"做这样的操作 npm i unplugin-auto-import - D vite配置 import AutoImport from unplugin-auto-import/vite //使用vite版本 export default defineConfig({plugins: [v…...
【Spring】lombok、dbUtil插件应用
一、lombok插件 1. 功能:对实体类自动,动态生成get、set方法,无参、有参构造..... 2. 步骤: (1)idea安装插件(只做一次) (2)添加坐标 (3)编写注解 NoArgsCo…...
【学习笔记】WSL
WSL 1、 介绍 1.1、概述 1.2、版本 1.3、配置安装 2、 基本 2.1、基本命令 1、 介绍 1.1、概述 WSL 是 Windows Subsystem for Linux 的缩写,中文称为 Windows 下的 Linux 子系统。它是微软在 Windows 上提供的一种功能,允许用户在 …...
python assert 断言用法
语法: try:assert 条件表达式, "可选的错误消息" except AssertionError as error:print(f"断言失败:{error}")其中, try...except是异常处理语法结构,try可以测试代码块中的错误,并在出现异常时…...
MySQL事务、索引、数据恢复和备份
MySQL事务、索引、数据恢复和备份 1.MySQL的事务处理 事务就是将一组SQL语句放在同一批次内去执行 如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行 MySQL的事务实现方法 : SET AUTOCOMMIT 使用SET语句来改变自动提交模式 SET AUTOCOMMIT 0; # 关…...
什么是chatgpt?国内有哪些类gpt模型?
什么是ChatGPT? “ChatGPT”这个名字越来越多地出现在我们的生活中。简单来说,ChatGPT是OpenAI开发的一种人工智能对话模型。它基于GPT(Generative Pre-trained Transformer,生成式预训练变换模型)架构,能…...
ISP基本框架及算法介绍 ISP(Image Signal Processor)
ISP基本框架及算法介绍 ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正、噪声去除、坏点去除、内插、白平衡、自动曝光控制等,依赖于ISP才能在不同的光学条件…...
Stable Diffusion 的 ControlNet 主要用途
SD(Stable Diffusion)中的ControlNet是一种条件生成对抗神经网络(Conditional Generative Adversarial Network, CGAN)的扩展技术,它允许用户通过额外的输入条件来控制预训练的大模型(如Stable Diffusion&a…...
矩阵分析 学习笔记4 内积与Gram矩阵
内积 定义 由于对称,第二变元线性那第一变元也线性了。例如这个:...
iOS 消息机制详解
应用 解决NSTimer、CADisplayLink循环引用。 二者都是基于runloop的定时器,由于处理事件内容不一样,runloop 每运行一次运行耗时就不一样,无法准确的定时触发timer的事件。 NSProxy 与 NSObject 如果继承自NSProxy 直接开始消息转发&…...
深入理解Spring Data JPA与接口编程
目录 1. 什么是Spring Data JPA? 2. 如何使用Spring Data JPA? 3. 示例代码 4. 使用Query注解 5. 拓展知识:接口编程的好处 6. 结论 在软件开发领域,接口(Interface)是一种定义了方法签名但没有实现的…...
Wireshark学习使用记录
wireshark 是一个非常好用的抓包工具,使用 wireshark 工具抓包分析,是学习网络编程必不可少的一项技能。 原理 Wireshark使用的环境大致分为两种:一种是电脑直连互联网的单机环境,另外一种就是应用比较多的互联网环境,也就是连接…...
OpenCV特征检测(9)检测图像中直线的函数HoughLines()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在二值图像中使用标准 Hough 变换查找直线。 该函数实现了用于直线检测的标准 Hough 变换或标准多尺度 Hough 变换算法。详见 http://homepages…...
力扣 中等 445.两数相加 II
文章目录 题目介绍题解 题目介绍 题解 首先反转两个链表,再调用 2. 两数相加 链接的代码,得到链表,最后将其翻转即可。 class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {l1 reverseList(l1);l2 reverseList(l…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Linux部署私有文件管理系统MinIO
最近需要用到一个文件管理服务,但是又不想花钱,所以就想着自己搭建一个,刚好我们用的一个开源框架已经集成了MinIO,所以就选了这个 我这边对文件服务性能要求不是太高,单机版就可以 安装非常简单,几个命令就…...
