1267. Count Servers that Communicate

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

Approach 01:

class Solution {
public:
    int countServers(vector<vector<int>>& grid) {
        const int numRows = grid.size();
        const int numCols = grid[0].size();
        int serverCount = 0;
        vector<int> rowCounts(numRows); // Number of servers in each row
        vector<int> colCounts(numCols); // Number of servers in each column

        // Count the servers in each row and column
        for (int row = 0; row < numRows; ++row)
            for (int col = 0; col < numCols; ++col)
                if (grid[row][col] == 1) {
                    ++rowCounts[row];
                    ++colCounts[col];
                }

        // Count servers that can communicate
        for (int row = 0; row < numRows; ++row)
            for (int col = 0; col < numCols; ++col)
                if (grid[row][col] == 1 && (rowCounts[row] > 1 || colCounts[col] > 1))
                    ++serverCount;

        return serverCount;
    }
};
class Solution:
    def countServers(self, grid: list[list[int]]) -> int:
        numRows = len(grid)
        numCols = len(grid[0])
        serverCount = 0
        rowCounts = [0] * numRows  # Number of servers in each row
        colCounts = [0] * numCols  # Number of servers in each column

        # Count the servers in each row and column
        for row in range(numRows):
            for col in range(numCols):
                if grid[row][col] == 1:
                    rowCounts[row] += 1
                    colCounts[col] += 1

        # Count servers that can communicate
        for row in range(numRows):
            for col in range(numCols):
                if grid[row][col] == 1 and (rowCounts[row] > 1 or colCounts[col] > 1):
                    serverCount += 1

        return serverCount

Time Complexity:

  • Counting Servers:

    The algorithm iterates through the grid to count the servers in each row and column, which takes \( O(m \times n) \), where \( m \) is the number of rows and \( n \) is the number of columns.

  • Counting Communicating Servers:

    The algorithm iterates through the grid again to check if each server can communicate, which also takes \( O(m \times n) \).

  • Overall Time Complexity:

    The total time complexity is \( O(m \times n) \).

Space Complexity:

  • Row and Column Counts:

    The space required to store the counts for rows and columns is \( O(m + n) \).

  • Overall Space Complexity:

    The total space complexity is \( O(m + n) \).

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top