[閒聊] leetcode 803.

作者: pandix (麵包屌)   2023-01-26 15:38:31
龍大心情不好 心理醫生建議他朝牆壁丟石頭紓壓
龍大真的很調皮 每丟一塊就會計算有多少磚塊被他砸落
龍大:哈哈,這面牆就跟邊版一樣被我搞崩了
路人看到調皮的龍大指責他的不是
龍大:甘你屁事@@
Python code:
class Solution:
def hitBricks(self, grid: List[List[int]], hits: List[List[int]]) ->
List[int]:
m, n = len(grid), len(grid[0])
root = list(range(m*n+1))
group = [1]*(m*n+1)
group[m*n] = 0
def find(x):
if root[x] != x:
root[x] = find(root[x])
return root[x]
def union(a, b):
ra, rb = find(a), find(b)
if ra != rb:
root[ra] = rb
group[rb] += group[ra]
for index, (i, j) in enumerate(hits):
if grid[i][j] == 1:
grid[i][j] = 0
else:
hits[index] = [-1,-1]
for i in range(m):
for j in range(n):
if grid[i][j]:
if i != m-1 and grid[i+1][j] == 1:
union(i*n + j, (i+1)*n + j)
if j != n-1 and grid[i][j+1] == 1:
union(i*n + j, i*n + j + 1)
if i == 0:
union(i*n + j, m*n)
res = [0]*len(hits)
dx = [0,0,1,-1]
dy = [1,-1,0,0]
for i in range(len(hits)-1, -1, -1):
origin = group[find(m*n)]
if hits[i] != [-1, -1]:
x, y = hits[i]
grid[x][y] = 1
if x == 0:
union(x*n + y, m*n)
for j in range(4):
adjx, adjy = x+dx[j], y+dy[j]
if 0 <= adjx < m and 0 <= adjy < n and grid[adjx][adjy]
== 1:
union(x*n + y, adjx*n + adjy)
res[i] = group[find(m*n)] - origin - (find(x*n+y) ==
find(m*n))
else:
res[i] = 0
return res
我也忘記這題在幹嘛了
作者: ririoshi (角落住民)   2022-01-26 15:38:00
靠北
作者: Benbenyale (想讓貝魯君更爽♥)   2023-01-26 15:39:00
想著BOE 下班距離我更近了
作者: uiojkl789 (雪!花!喵!喵!)   2023-01-26 15:39:00
笑死
作者: k960608 (霧羽‧浪沙)   2023-01-26 15:40:00
你敢質疑BOE的行為?
作者: HuiXillya (Illyasvien)   2023-01-26 15:45:00
靠杯
作者: DDFox (冒險者兼清潔工)   2023-01-26 15:57:00
大師

Links booklink

Contact Us: admin [ a t ] ucptt.com