Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5bf1117

Browse files
author
hj.tian
committed
feat: add leetcode75 day34
feat: add leetcode75 day34
1 parent 4217bc2 commit 5bf1117

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

‎leetcode75/day34_547.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
from collections import defaultdict
2+
from typing import List
3+
4+
5+
class Solution:
6+
def findCircleNum(self, isConnected: List[List[int]]) -> int:
7+
"""
8+
1. 构建有向图 edges:
9+
{
10+
0: [1],
11+
1: [0],
12+
2: [],
13+
}
14+
2. 广度优先搜索次数即为省份数量
15+
"""
16+
n = len(isConnected)
17+
if n < 1 or len(isConnected[0]) < 1:
18+
raise KeyError
19+
edges = defaultdict(list)
20+
for i in range(n):
21+
for j in range(n):
22+
if i != j and isConnected[i][j] == 1:
23+
edges[i].append(j)
24+
visit = [False for _ in range(n)]
25+
ans = 0
26+
for i in range(n):
27+
if visit[i] is False:
28+
self.bfs(edges, i, visit)
29+
ans += 1
30+
return ans
31+
32+
def bfs(self, edges, start, visit):
33+
queue = [start]
34+
while queue:
35+
size = len(queue)
36+
for i in range(size):
37+
visit[queue[i]] = True
38+
for city in edges[queue[i]]:
39+
if visit[city] is False:
40+
queue.append(city)
41+
queue = queue[size:]
42+
43+
44+
if __name__ == "__main__":
45+
assert Solution().findCircleNum(isConnected=[[1, 1, 0], [1, 1, 0], [0, 0, 1]]) == 2
46+
assert Solution().findCircleNum(isConnected=[[1, 0, 0], [0, 1, 0], [0, 0, 1]]) == 3

‎leetcode75/day34_947.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
from collections import defaultdict
2+
from typing import List
3+
4+
5+
class Solution:
6+
def removeStones(self, stones: List[List[int]]) -> int:
7+
8+
n = len(stones)
9+
if n < 1:
10+
raise KeyError
11+
edges = defaultdict(list)
12+
for i in range(n):
13+
for j in range(i + 1, n):
14+
if stones[i][0] == stones[j][0] or stones[i][1] == stones[j][1]:
15+
edges[i].append(j)
16+
# notes, 是双向图
17+
edges[j].append(i)
18+
visit = [False for _ in range(n)]
19+
connected = 0
20+
for i in range(n):
21+
if visit[i] is False:
22+
self.bfs(edges, i, visit)
23+
connected += 1
24+
return n - connected
25+
26+
def bfs(self, edges, start, visit):
27+
queue = [start]
28+
while queue:
29+
size = len(queue)
30+
for i in range(size):
31+
visit[queue[i]] = True
32+
for city in edges[queue[i]]:
33+
if visit[city] is False:
34+
queue.append(city)
35+
queue = queue[size:]
36+
37+
38+
if __name__ == "__main__":
39+
assert Solution().removeStones(stones=[[0, 0], [0, 1], [1, 0], [1, 2], [2, 1], [2, 2]]) == 5
40+
assert Solution().removeStones(stones=[[0, 0], [0, 2], [1, 1], [2, 0], [2, 2]]) == 3
41+
assert Solution().removeStones(stones=[[0, 0]]) == 0
42+
assert Solution().removeStones(stones=[[0, 1], [1, 0], [1, 1]]) == 2

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /