题意
给定一个m*n
的数组,数组中元素取值0或1,其中1表示该位置有服务器,0表示该位置无服务器。
- 如果在一行或一列有两个及两个以上的服务器,则同一行或同一列的服务器都能互相通信;
- 如果一个服务器其所在行和列都无其他服务器,则该服务器不能通信;
解法
题目比较绕,直白点就是找出满足条件除自身为1其所在行和所在列都为0
的所有元素;
最简单做法是统计每行1的个数和每列1的个数,然后扫描表中每个元素,如果该元素所在的行或列1的个数大于1,则认为服务器之间可以通信;
代码
class Solution {
public:
int countServers(vector<vector<int>>& grid) {
int m = grid.size(), n = grid[0].size(), sum = 0;
vector<int> row(m), col(n);
for (size_t i = 0; i < m; ++ i) {
for (size_t j = 0; j < n; ++ j) {
row[i] += grid[i][j];
col[j] += grid[i][j];
}
}
for (size_t i = 0; i < m; ++ i) {
for (size_t j = 0; j < n; ++ j) {
if (grid[i][j] == 1 && (row[i] > 1 || col[j] > 1)) {
++ sum;
}
}
}
return sum;
}
};
网友评论