Golang:
思路:这题虽然是M*N的时间复杂度,但使用并查集,好像会极大的减少时间复杂度。推测起来,要么我执行了太多的修改操作,要么计算机在处理二维数组上难度大于一维数组。
代码如下:
func numIslands(grid [][]byte) int {
arr:=make([]int,len(grid)*len(grid[0]))
for i,_:=range arr{
arr[i]=i
}
res:=0
r:=len(grid)
c:=len(grid[0])
for i:=0;i<r;i++{
for j:=0;j<c;j++{
if grid[i][j]=='1' {
res++
if checkI(grid,i-1,j){
res-=unionIslands(arr,(i-1)*c+j,i*c+j)
}
if checkI(grid,i,j-1){
res-=unionIslands(arr,i*c+j-1,i*c+j)
}
}
}
}
return res
}
func findRootIsland(arr []int,i int) int {
for arr[i]!=i{
i=arr[i]
}
return i
}
func unionIslands(arr []int,i,j int) int {
m,n:=findRootIsland(arr,i),findRootIsland(arr,j)
if m!=n{
arr[m]=arr[n]
return 1
}
return 0
}
func checkI(grid [][]byte, i,j int) bool {
if i>=0&&i<=len(grid)-1&&j>=0&&j<=len(grid[0])-1&&grid[i][j]=='1' {
return true
}
return false
}
有疑问加站长微信联系(非本文作者)