Description
You are given a map of a server center, represented as a m * n integer matrix grid, where 1 means that on that cell there is a server and 0 means that it is no server. Two servers are said to communicate if they are on the same row or on the same column.
Return the number of servers that communicate with any other server.
Example 1:
Input: grid = [[1,0],[0,1]]
Output: 0
Explanation: No servers can communicate with others.
Example 2:
Input: grid = [[1,0],[1,1]]
Output: 3
Explanation: All three servers can communicate with at least one other server.
Example 3:
Input: grid = [[1,1,0,0],[0,0,1,0],[0,0,1,0],[0,0,0,1]]
Output: 4
Explanation: The two servers in the first row can communicate with each other. The two servers in the third column can communicate with each other. The server at right bottom corner can't communicate with any other server.
Constraints:
- m == grid.length
- n == grid[i].length
- 1 <= m <= 250
- 1 <= n <= 250
- grid[i][j] == 0 or 1
分析
题目的意思是:给你一个数组,为1的地方是电脑,同行或者同列的电脑可以通信,问有多少电脑可以通信。我一开始想着是深度优先搜索+记忆数组,发现并不是,后面又尝试了暴力求解,发现总是全部不能ac。最后发现可以用一个行数组和列数组记录当前行和列的电脑数目,然后遍历有电脑的位置,只要所在的行或者列大于1,就可以通信,如果发现这个规律,就好做了。
代码
class Solution:
def countServers(self, grid: List[List[int]]) -> int:
m=len(grid)
n=len(grid[0])
row = [0]*m
col = [0]*n
computers=[]
res=0
for i in range(m):
for j in range(n):
if(grid[i][j]==1):
computers.append([i,j])
row[i]+=grid[i][j]
col[j]+=grid[i][j]
for item in computers:
i,j=item
if(row[i]>1 or col[j]>1):
res+=1
return res