每日一题:leetcode 1267 统计参与通信的服务器

news2025/1/16 1:48:01

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

思路:

暴力遍历。。。。(我这种肯定不是最优的)

先按行遍历,如果出现第一个,先记录位置,然后看看有没有第二个的出现。

ac code:

class Solution {
    public int countServers(int[][] grid) {
        int ans = 0;
        int n = grid.length;
        int m = grid[0].length;
        boolean[][] vis = new boolean[n][m];
        for (int i = 0;i<n;i++) {
            int flag = 0;
            int firstX = -1;
            int firstY = -1;
            for (int j =0;j<m;j++) {
                if (grid[i][j] == 1) {
                    if (flag > 1) {
                        ans += 1;
                        vis[i][j] = true;
                    } else if (flag == 1) {
                        ans += 2;
                        vis[i][j] = true;
                        vis[firstX][firstY] = true;
                    } else {
                        firstX = i;
                        firstY = j;
                    }
                    flag += 1;
                }
            }
        }

        for (int i=0;i<m;i++) {
            int flag = 0;
            int firstX = -1;
            int firstY = -1;
            for (int j=0;j<n;j++) {
                if (grid[j][i] == 1) {
                    if (flag > 1) {
                        ans += (vis[j][i] ? 0 : 1);
                        vis[j][i] = true;
                    } else if (flag == 1) {
                        ans += (vis[j][i] ? 0 : 1);
                        ans += (vis[firstX][firstY] ? 0 : 1);
                        vis[j][i] = true;
                        vis[firstX][firstY] = true;

                    } else {
                        firstX = j;
                        firstY = i;
                    }
                    flag += 1;
                }
            }
        }
        return ans;
    }
}

还有更优的,比如可以通过hashmap去记录行列是否出现,或者是通过一维数组+一个变量去记录,放一个更优的解法。

class Solution:
    def countServers(self, grid: List[List[int]]) -> int:
        m,n=len(grid),len(grid[0])
        col_alone=[-1]*n
        ans=0
        for i in range(m):
            row_alone=-1
            for j in range(n):
                if grid[i][j]==0:continue
                if row_alone==-1 and col_alone[j]==-1:
                    ##同行同列没有服务器
                    row_alone=j
                    col_alone[j]=i
                else:
                    if row_alone>=0:
                        ans+=1
                        col_alone[row_alone]=-2
                    ans+=(col_alone[j]>=0)+1
                    row_alone=-2
                    col_alone[j]=-2
        return ans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python“牵手”搜款网(VVIC)商品列表数据,关键词搜索搜款网API接口数据,搜款网API接口申请指南

搜款网&#xff08;VVIC&#xff09;平台API接口是为开发电商类应用程序而设计的一套完整的、跨浏览器、跨平台的接口规范&#xff0c;搜款网API接口是指通过编程的方式&#xff0c;让开发者能够通过HTTP协议直接访问搜款网平台的数据&#xff0c;包括商品信息、店铺信息、物流…

Cesium 后台返回的图片如何在代码里生成路径

文章目录 需求分析解决 需求 Cesium 中给地球加皮肤&#xff0c;但是皮肤是后台接口返回的图片&#xff0c;是动态值 分析 我们平常所了解到的贴图&#xff0c;路径只能是静态目录下的图片&#xff0c;而去请求后台的图片时出现了跨域&#xff0c;所以这个方法不可行&#…

安全服务工程师-徐庆臣(黑客洗白者)

职位描述 负责安全服务项目中的实施部分&#xff0c;包括&#xff1a;漏洞扫描、渗透测试、安全基线检 查、代码审计、应急响应等&#xff1b; 爆发高危漏洞后时行漏洞的分析应急&#xff1b; 对公司安全产品的后端支持&#xff1b; 掌握专业文档编写技巧&#xff1b; 关注行业…

计算机网络(10) --- 高级IO

计算机网络&#xff08;9&#xff09; --- 数据链路层与MAC帧_哈里沃克的博客-CSDN博客数据链路层与MAC帧https://blog.csdn.net/m0_63488627/article/details/132178583?spm1001.2014.3001.5501 1.IO介绍 1.IO本质 1.如果数据没有出现&#xff0c;那么读取文件其实会被阻塞住…

Linux下的系统编程——系统调用(五)

前言&#xff1a; 由操作系统实现并提供给外部应用程序的编程接口。(Application Programming Interface,API)。系统调用就是应用程序同系统之间数据交互的桥梁。 open/close函数 1.open函数&#xff1a; &#xff08;1&#xff09;int open(char *pathname, int flags) …

【C/C++】继承中构造函数与析构函数执行的顺序

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

14.4K Star,一款外观漂亮、运行快速、动画细腻的开源免费UI组件库

之前给大家推荐了很多后台模版&#xff0c;有读者希望推荐一些跟通用的好看组件&#xff0c;毕竟出了后台还有很多其他场景嘛。所以&#xff0c;今天继续给大家推荐一个广受好评的UI组件库&#xff1a;NextUI 主要特性 NextUI的主要目标是简化开发流程&#xff0c;为增强的用户…

Docker file解析

文章目录 简介构建的三步骤Docker执行Dockerfile的大致流程DockerFile常用保留字指令创建第一个Dockerfile镜像的缓存特性 Docker file 解析 简介 Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本&#xff0c;记录了镜像构…

PHP竞赛管理系统Dreamweaver开发mysql数据库web结构php编程计算机网页

一、源码特点 PHP 竞赛管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 下载地址 https://download.csdn.net/download/qq_41221322/88244066 二、功能介绍 后…

【校招VIP】前端校招考点之页面转换算法

考点介绍&#xff1a; 在地址映射过程中&#xff0c;若在页面中发现所要访问的页面不在内存中&#xff0c;则产生缺页中断。当发生缺页中断时&#xff0c;如果操作系统内存中没有空闲页面&#xff0c;则操作系统必须在内存选择一个页面将其移出内存&#xff0c;以便为即将调入的…

C++信息学奥赛1147:最高分数的学生姓名

#include <iostream> #include <string> using namespace std; int main() {int n;// 输入一个整数ncin>>n;cin.ignore();string arr;string str;int max0;int fen;// 循环读取n个评分和对应的字符串for(int i0;i<n;i){cin>>fen>>arr;if(fen&…

分布式事务(7):SpringCloud2.0整合LCN

目前LCN版本已经升级为4.0了,但是官方没有SpringCloud2.0的demo案例。 因为LCN本身是开源的,有些大神对LCN框架源码做修改,可以支持SpringCloud2.0版本。 下载地址:https://download.csdn.net/download/u013938578/88251904 1 下载LCN服务端源码 https://download.csdn.…

ubuntu22.04.1-live的vm虚拟机扩展磁盘

1、虚拟机分配硬盘100G&#xff0c;进系统df -h根目录只有50G 2、查看所有块设备 lsblk 3、 查看卷信息vgdisplay 4、在原有基础上增加49G lvextend -L 49G /dev/ubuntu-vg/ubuntu-lv 5、调整大小 resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv

深入理解线性回归模型的评估与优化方法

文章目录 &#x1f340;引言&#x1f340;模型评估方法&#x1f340;均方误差&#xff08;MSE&#xff09;&#x1f340;均方根误差&#xff08;RMSE&#xff09;&#x1f340;绝对平均误差&#xff08;MAE&#xff09;&#x1f340;模型优化策略&#x1f340;特征工程&#x1…

百度开源2019新型冠状病毒RNA预测算法

为应对2019年新型冠状病毒&#xff08;2019-nCoV&#xff09;爆发&#xff0c;中国科技巨头百度开源了其RNA&#xff08;核糖核酸&#xff09;预测算法LinearFold。该工具可以显著加快病毒RNA二级结构的预测时间&#xff0c;为一线研究人员提供在危机时期更好地了解病毒和开发靶…

多线程学习之多线程的三种实现方式及应用

一、继承Thread类 1.1方法 方法名说明void run()在线程开启后&#xff0c;此方法将被调用执行void start()使此线程开始执行&#xff0c;Java虚拟机会调用run方法() run()方法和start()方法的区别&#xff1a; run()&#xff1a;封装线程执行的代码&#xff0c;直接调用&am…

PDF如何转ppt?PDF转ppt的方法

PDF是一种广泛应用于文档传输和存储的格式&#xff0c;然而&#xff0c;在某些情况下&#xff0c;我们可能需要将PDF文件转换为PPT&#xff0c;以便更加灵活地编辑和展示内容。那么&#xff0c;PDF如何转ppt呢?在本文中&#xff0c;我们将介绍几种常用的方法和工具&#xff0c…

智慧编织非遗篇章,AI激活文化精髓的未来!

引言&#xff1a;非遗&#xff0c;指一系列与人类活动、传统技艺、知识体系和社会实践有关的非物质文化元素。它是一个民族难以估量的瑰宝&#xff0c;在中国悠久的历史中&#xff0c;古代先民在劳动生活中创造了大量非物质文化遗产&#xff0c;例如陶瓷的烧制、刺绣、织布技艺…

大隐隐于市,分享5个不为人知的小众软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。今天分享5个实用的软件&#xff0c;简单实用&#xff0c;效果拉满&#xff0c;堪称工作生活必备&#xff0…

Modbus通信协议详解

Modbus 协议是应用于电子控制器上的一种通用语言。通过此协议&#xff0c;控制器相互之间、控制器经由网络&#xff08;例如以太网&#xff09;和其它设备之间可以通信。它已经成为一通用工业标准。有了它&#xff0c;不同厂商生产的控制设备可以连成工业网络&#xff0c;进行集…