图题目:最大网络秩

devtools/2024/9/23 2:39:32/

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:最大网络秩

出处:1615. 最大网络秩

难度

4 级

题目描述

要求

n \texttt{n} n 座城市和一些连接这些城市的道路 roads \texttt{roads} roads 共同组成一个基础设施网络。每个 roads[i] = [a i , b i ] \texttt{roads[i] = [a}_\texttt{i}\texttt{, b}_\texttt{i}\texttt{]} roads[i] = [ai, bi] 表示在城市 a i \texttt{a}_\texttt{i} ai b i \texttt{b}_\texttt{i} bi 之间有一条双向道路。

两座不同城市构成的城市对的网络秩定义为:与这两座城市之一直接相连的道路总数。如果存在一条道路直接连接这两座城市,则这条道路只计算一次

整个基础设施网络的最大网络秩是所有不同城市对中的最大网络秩

给定整数 n \texttt{n} n 和数组 roads \texttt{roads} roads,返回整个基础设施网络的最大网络秩

示例

示例 1:

示例 1

输入: n = 4, roads = [[0,1],[0,3],[1,2],[1,3]] \texttt{n = 4, roads = [[0,1],[0,3],[1,2],[1,3]]} n = 4, roads = [[0,1],[0,3],[1,2],[1,3]]
输出: 4 \texttt{4} 4
解释:城市 0 \texttt{0} 0 1 \texttt{1} 1 的网络秩是 4 \texttt{4} 4,因为共有 4 \texttt{4} 4 条道路与城市 0 \texttt{0} 0 1 \texttt{1} 1 相连。位于 0 \texttt{0} 0 1 \texttt{1} 1 之间的道路只计算一次。

示例 2:

示例 2

输入: n = 5, roads = [[0,1],[0,3],[1,2],[1,3],[2,3],[2,4]] \texttt{n = 5, roads = [[0,1],[0,3],[1,2],[1,3],[2,3],[2,4]]} n = 5, roads = [[0,1],[0,3],[1,2],[1,3],[2,3],[2,4]]
输出: 5 \texttt{5} 5
解释:共有 5 \texttt{5} 5 条道路与城市 1 \texttt{1} 1 2 \texttt{2} 2 相连。

示例 3:

输入: n = 8, roads = [[0,1],[1,2],[2,3],[2,4],[5,6],[5,7]] \texttt{n = 8, roads = [[0,1],[1,2],[2,3],[2,4],[5,6],[5,7]]} n = 8, roads = [[0,1],[1,2],[2,3],[2,4],[5,6],[5,7]]
输出: 5 \texttt{5} 5
解释: 2 \texttt{2} 2 5 \texttt{5} 5 的网络秩是 5 \texttt{5} 5,注意并非所有的城市都需要相连。

数据范围

  • 2 ≤ n ≤ 100 \texttt{2} \le \texttt{n} \le \texttt{100} 2n100
  • 0 ≤ roads.length ≤ n × (n − 1) 2 \texttt{0} \le \texttt{roads.length} \le \dfrac{\texttt{n} \times \texttt{(n} - \texttt{1)}}{\texttt{2}} 0roads.length2n×(n1)
  • roads[i].length = 2 \texttt{roads[i].length} = \texttt{2} roads[i].length=2
  • 0 ≤ a i , b i ≤ n − 1 \texttt{0} \le \texttt{a}_\texttt{i}\texttt{, b}_\texttt{i} \le \texttt{n} - \texttt{1} 0ai, bin1
  • a i ≤ b i \texttt{a}_\texttt{i} \le \texttt{b}_\texttt{i} aibi
  • 每对城市之间最多只有一条道路相连

解法

思路和算法

将整个基础设施网络看成无向,每一座城市是一个结点,每条道路是一条无向边。根据网络秩的定义,两座不同的城市 a a a b b b 构成的城市对的网络秩为与城市 a a a 或城市 b b b 直接相连的道路总数,即中与结点 a a a 或结点 b b b 关联的边数。

在无向中,一个结点的度为与该结点关联的边数,因此为了计算城市 a a a 和城市 b b b 构成的城市对的网络秩,需要知道结点 a a a 和结点 b b b 的度。当结点 a a a 和结点 b b b 不邻接时,计算结点 a a a 和结点 b b b 的度之和,即为网络秩;当结点 a a a 和结点 b b b 邻接时,存在一条边连接结点 a a a 和结点 b b b,计算结点 a a a 和结点 b b b 的度之和会将连接结点 a a a 和结点 b b b 的边重复计算,因此结点 a a a 和结点 b b b 的度之和减 1 1 1 为网络秩。

根据上述分析可知,计算两座城市构成的城市对的网络秩时,需要知道这两座城市对应的结点的度,以及这两个结点是否邻接。遍历全部道路,即可得到中每个结点的度以及每一对结点是否邻接。使用数组记录每个结点的度,使用邻接矩阵记录每一对结点是否相邻。

在得到每个结点的度以及每一对结点是否邻接的信息之后,遍历每一对结点计算网络秩,遍历结束之后即可得到最大网络秩。

代码

class Solution {public int maximalNetworkRank(int n, int[][] roads) {int[] degrees = new int[n];boolean[][] connected = new boolean[n][n];for (int[] road : roads) {int city0 = road[0], city1 = road[1];degrees[city0]++;degrees[city1]++;connected[city0][city1] = true;connected[city1][city0] = true;}int maxRank = 0;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {int rank = degrees[i] + degrees[j] - (connected[i][j] ? 1 : 0);maxRank = Math.max(maxRank, rank);}}return maxRank;}
}

复杂度分析

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2),其中 n n n 是城市数。需要遍历中的每条边得到中每个结点的度以及每一对结点是否邻接,然后遍历每一对结点计算网络秩,由于中的边数最多为 O ( n 2 ) O(n^2) O(n2)中的结点对的数量为 O ( n 2 ) O(n^2) O(n2),因此时间复杂度是 O ( n 2 ) O(n^2) O(n2)

  • 空间复杂度: O ( n 2 ) O(n^2) O(n2),其中 n n n 是城市数。需要 O ( n ) O(n) O(n) 的空间记录每个城市对应的结点的度,以及 O ( n 2 ) O(n^2) O(n2) 的空间记录邻接矩阵,因此空间复杂度是 O ( n 2 ) O(n^2) O(n2)


http://www.ppmy.cn/devtools/34905.html

相关文章

为什么IB损失要在100epochs后再用?

在给定的代码中&#xff0c;参数start_ib_epoch用于控制从第几轮开始使用IB&#xff08;Instance-Balanced&#xff09;损失函数进行训练。具体来说&#xff0c;如果start_ib_epoch的值大于等于100&#xff0c;那么在训练的前100轮中将使用普通的交叉熵损失函数&#xff08;CE&…

解决一个朋友的nbcio-boot的mysql数据库问题

1、原先安装mysql5.7数据库&#xff0c;导入我的项目里的带数据有报错信息 原因不明 2、只能建议用docker进行msyql5.7的安装 如下&#xff0c;可以修改成自己需要的信息 docker run -p 3306:3306 --name mastermysql -v /home/mydata/mysql/data:/var/lib/mysql -e MYSQL_R…

第五十一周:文献阅读+CNN-LSTM-AM

目录 摘要 Abstract 文献阅读&#xff1a;基于CNN-LSTM-AM时空深度学习模型的城市供水预测 现存问题 提出方法 创新点 方法论 CNN-LSTM-AM模型 研究实验 数据集 预处理 评估指标 实验过程 合格性验证 模型实现 总结 摘要 本周阅读的文献《Urban Water Supply …

【跟马少平老师学AI】-【神经网络是怎么实现的】(八)循环神经网络

一句话归纳&#xff1a; 1&#xff09;词向量与句子向量的循环神经网络&#xff1a; x(i)为词向量。h(i)为含前i个词信息的向量。h(t)为句向量。 2&#xff09;循环神经网络的局部。 每个子网络都是标准的全连接神经网络。 3&#xff09;对句向量增加全连接层和激活函数。 每个…

Yarn的安装及使用

YARN的安装及使用主要分为以下几个步骤&#xff1a; 一、安装YARN YARN的安装依赖于Node.js的运行环境&#xff0c;因此需要先安装Node.js。 下载并安装Node.js&#xff1a;可以从Node.js官网下载并安装适合你操作系统的Node.js安装包。安装YARN&#xff1a; 在Windows系统…

nginxconfig.io项目nginx可视化配置--搭建-视频

项目地址 https://github.com/digitalocean/nginxconfig.io搭建视频 nginxconfig.io搭建 nginxconfig.io搭建 展示效果 找到这个项目需要的docker镜像&#xff0c;有项目需要的node的版本 docker pull node:20-alpine运行这个node容器,在主机中挂载一个文件夹到容器中 主机&a…

【STM32嵌入式系统设计与开发】——18DAC(DAC输出应用)

这里写目录标题 STM32资料包&#xff1a; 百度网盘下载链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1mWx9Asaipk-2z9HY17wYXQ?pwd8888 提取码&#xff1a;8888 一、任务描述二、任务实施1、工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#…

vscode连接服务器的docker步骤

进入容器之后&#xff0c;操作方式与本地windows系统操作逻辑一样&#xff1b;容器内部结构都能任意查看和使用&#xff0c;创建文件及编写python脚本都可以直接使用vs code编辑器进行编辑和调试&#xff0c;从而避免使用命令行及vim编辑文件&#xff0c;非常直观且方便~