美文网首页LeetCode题解及面试
【LeetCode】1267. Count Servers th

【LeetCode】1267. Count Servers th

作者: LeetPub | 来源:发表于2019-12-02 10:39 被阅读0次

    题意

    给定一个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;
        }
    };
    

    相关文章

      网友评论

        本文标题:【LeetCode】1267. Count Servers th

        本文链接:https://www.haomeiwen.com/subject/eodawctx.html