目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客
GitHub同步刷题项目:
https://github.com/September26/java-algorithms
原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
描述:
这里有一幅服务器分布图,服务器的位置标识在 m * n
的整数矩阵网格 grid
中,1 表示单元格上有服务器,0 表示没有。
如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。
请你统计并返回能够与至少一台其他服务器进行通信的服务器的数量。
示例 1:
输入:grid = [[1,0],[0,1]] 输出:0 解释:没有一台服务器能与其他服务器进行通信。
示例 2:
输入:grid = [[1,0],[1,1]] 输出:3 解释:所有这些服务器都至少可以与一台别的服务器进行通信。
示例 3:
输入:grid = [[1,1,0,0],[0,0,1,0],[0,0,1,0],[0,0,0,1]] 输出:4 解释:第一行的两台服务器互相通信,第三列的两台服务器互相通信,但右下角的服务器无法与其他服务器通信。
提示:
m == grid.length
n == grid[i].length
1 <= m <= 250
1 <= n <= 250
grid[i][j] == 0 or 1
解题思路:
* 解题思路:
* 先跑一轮,看一下那些行和列是有多个的。
* 然后跑第二轮,找到那些可通讯的
代码:
class Solution1267
{
public:
int countServers(vector<vector<int>> &grid)
{
vector<int> xLine(grid[0].size());
vector<int> yLine(grid.size());
for (int y = 0; y < grid.size(); y++)
{
for (int x = 0; x < grid[y].size(); x++)
{
if (grid[y][x] == 0)
{
continue;
}
yLine[y]++;
xLine[x]++;
}
}
int num = 0;
for (int y = 0; y < grid.size(); y++)
{
for (int x = 0; x < grid[y].size(); x++)
{
if (grid[y][x] == 0)
{
continue;
}
if (yLine[y] > 1)
{
num++;
continue;
}
if (xLine[x] > 1)
{
num++;
}
}
}
return num;
}
};