力扣题解2374

ops/2024/9/22 17:03:14/

大家好,欢迎来到无限大的频道。

今日继续给大家带来力扣题解。

题目描述(中等):

边积分最高的节点

给你一个有向图,图中有 n 个节点,节点编号从 0 到 n - 1 ,其中每个节点都 恰有一条 出边。

图由一个下标从 0 开始、长度为 n 的整数数组 edges 表示,其中 edges[i] 表示存在一条从节点 i 到节点 edges[i] 的 有向 边。

节点 i 的 边积分 定义为:所有存在一条指向节点 i 的边的节点的 编号 总和。

返回 边积分 最高的节点。如果多个节点的 边积分 相同,返回编号 最小 的那个。

图片

图片

解题思路:

我们需要计算每个节点的边积分,即所有指向该节点的边的源节点编号的总和。由于每个节点只有一条出边,我们可以利用一个数组来存储每个节点的边积分。

步骤:

  1. 初始化一个长度为 n 的数组 in_degree_sum,用于存储每个节点的边积分。

  2. 遍历 edges 数组,对于每个节点 i,更新指向 edges[i] 的节点的边积分。例如,将 i 加到 in_degree_sum[edges[i]] 中。

  3. 找到 in_degree_sum 中的最大值及其对应的节点。如果有多个节点有相同的边积分,返回编号最小的节点。

参考代码:

int edgeScore(int* edges, int edgesSize) {long long in_degree_sum[edgesSize];for(int i = 0; i < edgesSize; i++){in_degree_sum[i] = 0;}for (int i = 0; i < edgesSize; i++) {in_degree_sum[edges[i]] += i;  // 将节点 i 加到 edges[i] 的积分中}int max_node = 0;long long max_sum = in_degree_sum[0];for(int i = 0; i < edgesSize; i++){if(in_degree_sum[i] > max_sum){max_sum = in_degree_sum[i];max_node = i;}}return max_node;
}

函数逻辑概述

-输入: 一个整数数组 `edges`,表示有向图中每个节点的出边。

-目标: 计算每个节点的边积分,最终返回边积分最高的节点编号。如果有多个节点的边积分相同,返回编号最小的那个。

时间复杂度分析

函数的主要操作可以分为三个部分:

1. 初始化 `in_degree_sum` 数组:

   for(int i = 0; i < edgesSize; i++){in_degree_sum[i] = 0;}

   这个循环的时间复杂度是 O(n),其中 n 是 `edgesSize`。

2. 计算边积分:

    for (int i = 0; i < edgesSize; i++) {in_degree_sum[edges[i]] += i;  // 将节点 i 加到 edges[i] 的积分中}

   这个循环的时间复杂度也是 O(n)。

3. 查找边积分最高的节点:

 for(int i = 0; i < edgesSize; i++){if(in_degree_sum[i] > max_sum){max_sum = in_degree_sum[i];max_node = i;}}

   这个循环的时间复杂度同样是 O(n)。

将这三部分的时间复杂度相加,我们得到:

- 总时间复杂度: O(n) + O(n) + O(n) = O(n)

空间复杂度分析

函数使用了一个额外的数组 `in_degree_sum` 来存储每个节点的边积分,其大小为 `edgesSize`。因此,空间复杂度分析如下:

- 额外空间: `in_degree_sum` 数组的大小为 n,因此空间复杂度为 O(n)。

除了 `in_degree_sum` 数组外,函数中使用的其他变量(如 `max_node`, `max_sum` 和循环变量)只占用常数空间,不会随输入规模变化。

总结

- 时间复杂度: O(n)

- 空间复杂度: O(n)


http://www.ppmy.cn/ops/114337.html

相关文章

儿童与成人目标检测系统源码分享

儿童与成人目标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

高级I/O知识分享【5种IO模型 || select || poll】

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;Linux_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 一&#xff0c;前文 2&a…

nvm 下载node报错:Could not retrieve https://nodejs.org/dist/index.json.

报错信息&#xff1a;Could not retrieve https://nodejs.org/dist/index.json. Get "https://nodejs.org/dist/index.json": dial tcp 104.20.23.46:443: i/o timeout 这是因为node源都是国外的服务&#xff0c;连接超时&#xff0c;所以我们把node源设置为国内的镜…

sql执行流程经典案例分析

现在有联合索引(a,b),select* form tb where b xx group by a执行流程是什么样子的? CREATE TABLE IF NOT EXISTS test(id INT(10) NOT NULL AUTO_INCREMENT COMMENT主键,a INT(10) NULL,b INT(10) NULL,PRIMARY KEY(id),INDEX idx_a_b(a,b))ENGINE INNODB;INSERT INTO test…

1.随机事件与概率

第一章 随机时间与概率 1. 随机事件及其运算 1.1 随机现象 ​ 确定性现象&#xff1a;只有一个结果的现象 ​ 确定性现象&#xff1a;结果不止一个&#xff0c;且哪一个结果出现&#xff0c;人们事先并不知道 1.2 样本空间 ​ 样本空间&#xff1a;随机现象的一切可能基本…

【YOLO目标检测学生课堂行为数据集】共4266张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;4266 标注数量(txt文件个数)&#xff1a;4266 标注类别数&#xff1a;3 标注类别名称&#xff1a;hand、read、write 数据集下载&#xff1a;学生课堂行为数据集 图片示例 数据集图片&#…

区块链DAPP质押系统开发

质押系统开发DAPP&#xff08;去中心化应用&#xff09;是一个涉及多个步骤和技术领域的复杂过程。以下是质押系统开发DAPP的主要步骤和关键点&#xff1a; 一、需求分析 明确需求&#xff1a;与客户深入沟通&#xff0c;明确项目的具体需求&#xff0c;包括功能特性、用户体验…

解释器模式:将语法规则与执行逻辑解耦

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了评估语言的语法或表达式的方式。该模式通过定义一个语言的文法表示&#xff0c;并通过解释这些表示来执行相应的操作。 解释器模式主要用于设计一种特定类型的计算机语言或表达式…