当前位置: 首页 > 后端技术 > Java

并查看练习——LeetCode200IslandNumber

时间:2023-04-01 16:58:29 Java

IslandNumber1water)),请数一数网格中的岛屿数量。岛屿总是被水包围,每个岛屿只能通过连接水平和垂直相邻的陆地才能形成。此外,您可以假设网格的所有四个侧面都被水包围。2.输入示例:grid=[["1","1","1","1","0"],["1","1","0","1","0"],["1","1","0","0","0"],["0","0","0","0","0"]]输出:13,思路(一)使用感染的方法1)从左到右,从上到下,逐个遍历二维数组。当值为'1'时,将其附近的top、bottom、left、right的'1'改为22)每修改一次,岛数加1,最后返回岛数(2)使用和搜索1)将每个点初始化为自己的集合2)从左到右,从上到下遍历维度数组,如果是'1',则合并左边的'1'和右边的'1'top3)最终收集的数量就是岛屿的数量有个问题:不同的'1'表示不同的土地,如何区分不同的'1'。包裹一层。该方法时间复杂度的常数时间比较大。(3)使用优化后的并集搜索集解决不同'1代表不同地块如何区分不同'1的问题,使用一维数组重新处理,将原来的(i,j)位置的数进行转换映射到数组的位置(i*列数+j)4.代码(1)使用了infected方法/***1,使用了dyed方法**时间复杂度O(m*n)**@authorJava和算法学习:星期一*/publicstaticintnumIslands(char[][]grid){intresult=0;//一个一个遍历整个二维数组for(inti=0;idotList=newArrayList<>();for(inti=0;iuf=newUnionFind1<>(dotList);//分别合并第一行for(intj=1;j