岛问题
一個(gè)矩陣中只有0和1兩種值,每個(gè)位置都可以和自己的上、下、左、右 四個(gè)位置相連,如果有一片1連在一起,這個(gè)部分叫做一個(gè)島,求一個(gè) 矩陣中有多少個(gè)島?
舉例:
001010
111010
100100
000000
這個(gè)矩陣中有三個(gè)島
思想對(duì)于每一個(gè)matrix,從左向右遍歷每一行,整體從上向下遍歷所有的行。如果來到是1的位置,開始一個(gè)感染過程,就是從當(dāng)前位置,把連成一片的1全部變成2。感染過程結(jié)束之后,繼續(xù)遍歷matrix,直到結(jié)束。有多少次感染的過程,就有多少個(gè)島
def infect(m,i,j,M,N):if i < 0 or j < 0 or i >= M or j >= N or m[i][j]!=1:return m[i][j] = 2infect(m,i+1,j,M,N)infect(m,i-1,j,M,N)infect(m,i,j+1,M,N)infect(m,i,j-1,M,N)def count(m):if m == None or m[0] == None:return M = len(m)N = len(m[0])res = 0for i in range(M):for j in range(N):if m[i][j] == 1:res +=1infect(m,i,j,M,N)return res?
如果并行計(jì)算,把矩陣拆分開分開計(jì)算,之后進(jìn)行合并,可以加快速度,主要由以下幾步構(gòu)成
1、并行計(jì)算兩部分島的數(shù)量以及收集邊界信息
2、利用并查集實(shí)現(xiàn)減少島的過程
?
總結(jié)
- 上一篇: 一致性哈希算法的基本原理
- 下一篇: 字典数(前缀树)的实现