上海网站分站建设成都市建设质监站网站

news/2025/9/28 16:52:37/文章来源:
上海网站分站建设,成都市建设质监站网站,查图百度识图,泗阳网页定制【问题描述】 第200题 岛屿数量 给你一个由 1#xff08;陆地#xff09;和 0#xff08;水#xff09;组成的的二维网格#xff0c;请你计算网格中岛屿的数量。岛屿总是被水包围#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外#xf…【问题描述】 第200题 岛屿数量 给你一个由 1陆地和 0水组成的的二维网格请你计算网格中岛屿的数量。岛屿总是被水包围并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外你可以假设该网格的四条边均被水包围。示例 1:输入: 11110 11010 11000 00000 输出: 1 示例 2:输入: 11000 11000 00100 00011 输出: 3 解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。 【解答思路】 1. 深度优先遍历 时间复杂度O(N^2) 空间复杂度O(N) /*** 方法一深度优先遍历*/ public class Solution {// x-1,y// x,y-1 x,y x,y1// x1,y// 方向数组它表示了相对于当前位置的 4 个方向的横、纵坐标的偏移量这是一个常见的技巧private static final int[][] directions {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};// 标记数组标记了 grid 的坐标对应的格子是否被访问过private boolean[][] marked;// grid 的行数private int rows;// grid 的列数private int cols;private char[][] grid;public int numIslands(char[][] grid) {rows grid.length;if (rows 0) {return 0;}cols grid[0].length;this.grid grid;marked new boolean[rows][cols];int count 0;for (int i 0; i rows; i) {for (int j 0; j cols; j) {// 如果是岛屿中的一个点并且没有被访问过// 就进行深度优先遍历if (!marked[i][j] grid[i][j] 1) {count;dfs(i, j);}}}return count;}// 从坐标为 (i,j) 的点开始进行深度优先遍历private void dfs(int i, int j) {marked[i][j] true;// 得到 4 个方向的坐标for (int k 0; k 4; k) {int newX i directions[k][0];int newY j directions[k][1];// 如果不越界、没有被访问过、并且还要是陆地if (inArea(newX, newY) grid[newX][newY] 1 !marked[newX][newY]) {dfs(newX, newY);}}}// 封装成 inArea 方法语义更清晰private boolean inArea(int x, int y) {// 等于号不要忘了return x 0 x rows y 0 y cols;}public static void main(String[] args) {Solution solution new Solution();char[][] grid1 {{1, 1, 1, 1, 0},{1, 1, 0, 1, 0},{1, 1, 0, 0, 0},{0, 0, 0, 0, 0}};int numIslands1 solution.numIslands(grid1);System.out.println(numIslands1);char[][] grid2 {{1, 1, 0, 0, 0},{1, 1, 0, 0, 0},{0, 0, 1, 0, 0},{0, 0, 0, 1, 1}};int numIslands2 solution.numIslands(grid2);System.out.println(numIslands2);} } 2. 广度优先遍历 时间复杂度O(N) 空间复杂度O(N) import java.util.LinkedList;/*** 方法二广度优先遍历*/ public class Solution2 {private int rows;private int cols;public int numIslands(char[][] grid) {// x-1,y// x,y-1 x,y x,y1// x1,yint[][] directions {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};rows grid.length;if (rows 0) {return 0;}cols grid[0].length;boolean[][] marked new boolean[rows][cols];int count 0;for (int i 0; i rows; i) {for (int j 0; j cols; j) {// 如果是岛屿中的一个点并且没有被访问过// 从坐标为 (i,j) 的点开始进行广度优先遍历if (!marked[i][j] grid[i][j] 1) {count;LinkedListInteger queue new LinkedList();// 小技巧把坐标转换为一个数字// 否则得用一个数组存在 Python 中可以使用 tuple 存queue.addLast(i * cols j);// 注意这里要标记上已经访问过marked[i][j] true;while (!queue.isEmpty()) {int cur queue.removeFirst();int curX cur / cols;int curY cur % cols;// 得到 4 个方向的坐标for (int k 0; k 4; k) {int newX curX directions[k][0];int newY curY directions[k][1];// 如果不越界、没有被访问过、并且还要是陆地我就继续放入队列放入队列的同时要记得标记已经访问过if (inArea(newX, newY) grid[newX][newY] 1 !marked[newX][newY]) {queue.addLast(newX * cols newY);// 【特别注意】在放入队列以后要马上标记成已经访问过语义也是十分清楚的反正只要进入了队列你迟早都会遍历到它// 而不是在出队列的时候再标记// 【特别注意】如果是出队列的时候再标记会造成很多重复的结点进入队列造成重复的操作这句话如果你没有写对地方代码会严重超时的marked[newX][newY] true;}}}}}}return count;}private boolean inArea(int x, int y) {// 等于号这些细节不要忘了return x 0 x rows y 0 y cols;}public static void main(String[] args) {Solution2 solution2 new Solution2();char[][] grid1 {{1, 1, 1, 1, 0},{1, 1, 0, 1, 0},{1, 1, 0, 0, 0},{0, 0, 0, 0, 0}};int numIslands1 solution2.numIslands(grid1);System.out.println(numIslands1);char[][] grid2 {{1, 1, 0, 0, 0},{1, 1, 0, 0, 0},{0, 0, 1, 0, 0},{0, 0, 0, 1, 1}};int numIslands2 solution2.numIslands(grid2);System.out.println(numIslands2);} } 3. 并查集 public class Solution { public int numIslands(char[][] grid) {int rows grid.length;if (rows 0) {return 0;}int cols grid[0].length;int size rows * cols;// 两个方向的方向向量理解为向下和向右的坐标偏移int[][] directions {{1, 0}, {0, 1}};// 1 是认为虚拟的水域UnionFind unionFind new UnionFind(size 1);for (int i 0; i rows; i) {for (int j 0; j cols; j) {if (grid[i][j] 1) {for (int[] direction : directions) {int newX i direction[0];int newY j direction[1];if (newX rows newY cols grid[newX][newY] 1) {unionFind.union(cols * i j, cols * newX newY);}}} else {// 如果不是陆地所有的水域和一个虚拟的水域连接unionFind.union(cols * i j, size);}}}// 减去那个一开始多设置的虚拟的水域return unionFind.count - 1; }class UnionFind {private int[] parent;private int count;public UnionFind(int n) {this.count n;parent new int[n];for (int i 0; i n; i) {parent[i] i;}}/*** 返回索引为 p 的元素的根结点** param p* return*/public int find(int p) {// 在 find 的时候执行路径压缩while (p ! parent[p]) {// 两步一跳完成路径压缩这里是「隔代压缩」// 说明「隔代压缩」和「按秩合并」选择一个实现即可「隔代压缩」的代码量少所以选它parent[p] parent[parent[p]];p parent[p];}return p;}public boolean connected(int p, int q) {int pRoot find(p);int qRoot find(q);return pRoot qRoot;}public void union(int p, int q) {int pRoot find(p);int qRoot find(q);if (pRoot qRoot) {return;}parent[qRoot] pRoot;// 每次 union 以后连通分量减 1count--;} }} 【总结】 1. 深度遍历 递归 2. 广度遍历 队列所有加入队列的结点都应该马上被标记为 “已经访问”否则有可能会被重复加入队列 3.并查集学习资料 https://liweiwei1419.gitee.io/leetcode-algo/leetcode-by-tag/union-find/ 参考链接https://leetcode-cn.com/problems/number-of-islands/solution/dfs-bfs-bing-cha-ji-python-dai-ma-java-dai-ma-by-l/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/920853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做设计用图片的网站为什么不做网站做公众号

有win10用户说他在更新完系统后,在切换输入法的时候发现竟然切换不了无法切换,都不知道该怎么办了,这个小问题也是常有的,那么win10更新后不能切换输入法怎么办呢,下面小编给大家分享win10输入法切换不了的解决方法。 …

2025 年棕刚玉源头厂家最新推荐排行榜:TOP 级生产厂家原料与烧结工艺权威解析,助力企业精准选购一级棕刚玉/棕刚玉磨料/优质棕刚玉/棕刚玉喷砂废料回收厂家推荐

在工业研磨、表面处理等关键领域,棕刚玉磨料的品质直接决定生产效率与成品精度,是下游企业保障生产质量的核心要素。当前市场中,棕刚玉厂家数量繁杂,部分厂家存在原料把控不严、烧结工艺落后等问题,导致产品杂质超…

杀疯了!GitHub 发布 Copilot CLI!!!

大家好,我是R哥。 今年 AI 编程赛道真是大乱斗啊,特别是面向「终端」的 AI 编程工具,自从 Anthropic 的 Claude Code CLI 问世以来,XX CLI 层出不穷:Google - Gemini CLI Cursor CLI OpenAI - CodeX CLI ……如果…

2025 年无尘金刚砂源头厂家最新推荐排行榜:权威精选企业产能与品质深度解析无尘金刚砂材料/无尘金刚砂批发/无尘金刚砂喷砂厂家推荐

在工业研磨、表面处理等核心领域,无尘金刚砂的品质直接决定加工精度、生产效率及工件成品质量,是众多企业生产环节中不可或缺的关键磨料。当前市场上,无尘金刚砂厂家数量众多,但产品质量差异显著,部分厂家因原料劣…

langgraph-genui

langgraph-genui https://github.com/fanqingsong/langgraph-genuiLangGraph GenUI 微服务架构这是一个基于 LangGraph 的微服务架构项目,包含智能体服务和前端对话界面两个独立的微服务。项目结构langgraph-genui/ ├…

外国网站邀请做编辑广州做网站找酷爱网络

开源项目专题系列(八)1.开源项目名称:magpie_fly2.github地址:https://github.com/wuba/magpie_fly3.简介:magpie_fly 是58集体出品组件库,统一管理日常开发中的基础组件及高阶组件,并提供了相对友好的方式介绍组件的具…

中国住房和城乡建设厅网站美食教做网站

过了面试,后面的在线测评还会刷人吗?完全有可能刷,如果不是为了刷,何必要给你做线上测评,我说的有道理不? 好吧,说到为什么在线测评要刷人,怎么刷? 怎么才能确保不被刷&…

web服务器配置步骤有哪些?如何建立一个web服务器

建立一个 Web 服务器 并配置它,是托管网站、应用程序或服务的基础任务。以下是完整的 Web 服务器配置步骤,涵盖从准备服务器到部署网站的流程,包括选择技术栈、安装软件、配置安全性和优化性能。1. 准备工作 1.1 选…

题解:P10005 [集训队互测 2023] 基础寄术练习题

好牛的计数题。 题意:很简单了,不再赘述。 做法: 首先看到这个前缀和的乘积的倒数太难算了,一般来说肯定是考虑拆成 \(a\) 怎么样算一下,经过一定的手玩以后会发现 \(\sum\prod\limits_{i}\frac{1}{s_i}=\prod\fr…

详细介绍:Linux----gcc、g++的使用以及一些问题

详细介绍:Linux----gcc、g++的使用以及一些问题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

网页和网站有什么关系网络建设与维护是什么

工厂模式用于干掉大量的if-else ,策略模式用于挪去臃肿的业务代码,还可以进一步升级加上模板模式,以及抽取成Starter public interface HandlerStrategy extends InitializingBean {void findSyncOrders(); }public class SalesPlatformFact…

网站logo怎么设计哪个网站可以做立体字的模板

文章目录1. 题目2. 解题1. 题目 设计一个支持下述操作的食物评分系统: 修改 系统中列出的某种食物的评分。返回系统中某一类烹饪方式下评分最高的食物。 实现 FoodRatings 类: FoodRatings(String[] foods, String[] cuisines, int[] ratings) 初始化…

电子商务网站开发常用工具建筑资料管理规程

最近很多朋友(Andrew、BENEN1)都在问如何让Lookup显示InActive记录,研究后发现可以通过Plugin来实现这样的功能,MSCRM真是无所不能,没有做不到,只有想不到!实现步骤:一、自定义实体->工程项目->表单和视图->查找视图->…

网站制作有哪些技术外贸电商网站建设

RPC和WebService的关系RPC(Remote Procedure Call)— 远程过程调用,是一个很大的概念, 它是一种通过网络从远程计算机程序上跨语言跨平台的请求服务,rpc能省略部分接口代码的开发,可以跨机器之间访问对象(java rmi),可以有更方便的…

学院网站建设时间控制变更申请表北京软件开发公司排行榜最新

在Spring Cloud Gateway中,GlobalFilter接口允许你创建全局过滤器,这意味着该过滤器会应用到所有的路由上,无论它们是否匹配特定的路由规则。Ordered接口用于定义过滤器的执行顺序。 以下是一个AuthFilter类的示例,该类实现了Glo…

同步和互斥的基本概念

同步与互斥的基本概念 临界资源 我们将一次仅允许一个进程使用的资源称为临界资源 什么是进程同步 直接制约关系,他是指为了完成某种任务而建立的两个或多个进程,这些进程因为需要某些位置上协调他们的工作次序而产生…

Sep 28

只整理 T1, T2. 原题是 「ROI 2012 Day 1」密码 和 「ROI 2012 Day 2」剧院始于演员,可以与 LOJ 提交。 T1 考试的时候忘记 return 0, 导致一口气把所有答案都输出出来了,100->30,再次警示使用 break 的时候一定…

图像采集卡:连接镜头与机器的“视觉神经”,释放工业智能核心动力

什么是图像采集卡? 身处机器视觉、智能制造、医疗影像等行业前沿的你,是否常听到“图像采集卡”这个词?它绝非简单的配件,而是现代工业应用中的关键“视觉神经”。简单来说,图像采集卡(又称视频采集卡或帧抓取器…

2025 年生态木厂商最新推荐榜单:TOP 前五企业实力解析及厂商选择指南生态木方通/户外地板/装饰线条/隔断/背景墙厂商推荐

在环保装饰材料需求持续攀升的当下,生态木(WPC)凭借环保、耐用等优势,成为家装与工装领域的热门选择,但市场乱象却让采购方陷入困境。一方面,大量中小品牌缺乏核心技术,产品在防水、防火、环保性上不达标,且同…