• LeetCode 1267 统计参与通信的服务器 Count Servers that Communicate


    地址 https://leetcode-cn.com/problems/count-servers-that-communicate/

    题目描述
    这里有一幅服务器分布图,服务器的位置标识在 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

    算法1
    单独计算同行 同列的元素计数 大于等于2 则算作可互相通讯

    class Solution {
    public:
    
    set<vector<int>> resultSet;
    int countServers(vector<vector<int>>& grid) {
        for (int i = 0; i < grid.size(); i++) {
            int firstx = -1; int firsty = -1;
            for (int j = 0; j < grid[0].size(); j++) {
                if (grid[i][j] == 1) {
                    if (firstx == -1) {
                        firstx = i; firsty = j;
                    }
                    else {
                        vector<int>v1{ firstx, firsty };
                        resultSet.insert(v1);
                        vector<int>v2{ i, j };
                        resultSet.insert(v2);
                    }
                }
            }
        }
    
        for (int y = 0; y < grid[0].size(); y++) {
            int firstx = -1; int firsty = -1;
            for (int x = 0; x < grid.size(); x++) {
                if (grid[x][y] == 1) {
                    if (firstx == -1) {
                        firstx = x; firsty = y;
                    }
                    else {
                        vector<int>v1{ firstx, firsty };
                        resultSet.insert(v1);
                        vector<int>v2{ x, y };
                        resultSet.insert(v2);
    
                    }
                }
            }
        }
    
        return resultSet.size();
    }
    
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    二进制,八进制,十六进制,十进制之间的换算
    14简化路径(71)
    13字符串解码(394)
    12 反转每对括号间的子串(1190)
    11 使括号有效的最少添加(921)
    10 K 个一组翻转链表(25)
    9 从链表中删去总和值为零的连续节点(1171)
    8 链表中的下一个更大节点(1019)
    7两两交换链表中的节点(24)
    6 奇偶链表(
  • 原文地址:https://www.cnblogs.com/itdef/p/11922583.html
Copyright © 2020-2023  润新知