【每日一题】LeetCode 2374.边积分最高节点(图、哈希表)

【每日一题】LeetCode 2374.边积分最高节点(图、哈希表)

题目描述

给定一个有向图,图中包含 n 个节点,节点编号从 0n - 1。每个节点都有一个出边,指向图中的另一个节点。图由一个长度为 n 的整数数组 edges 表示,其中 edges[i] 表示存在一条从节点 i 到节点 edges[i] 的有向边。

每个节点 i 的"边积分"定义为所有存在一条指向节点 i 的边的节点的编号之和。

任务是找出边积分最高的节点。如果多个节点的边积分相同,则返回编号最小的节点。

思路分析

  1. 初始化 :创建一个长度为 n 的数组 ans 用于存储每个节点的边积分,初始值都为 0

  2. 计算边积分 :遍历数组 edges,对于每个节点 i,将其编号 i 加到它指向的节点 edges[i] 在数组 ans 中对应的位置上。这样,每个节点的边积分就是所有指向它的节点编号的和。

  3. 寻找最大边积分 :遍历数组 ans,找到具有最大边积分的节点。如果有多个节点边积分相同,则选择编号最小的节点。

  4. 返回结果:返回边积分最高的节点的编号。

输入示例

  • 示例 1:

    • 输入:edges = [1,0,0,0,0,7,7,5]
    • 输出:7
    • 解释:- 节点 1、2、3 和 4 都有指向节点 0 的边,节点 0 的边积分等于 1 + 2 + 3 + 4 = 10 。- 节点 0 有一条指向节点 1 的边,节点 1 的边积分等于 0 。- 节点 7 有一条指向节点 5 的边,节点 5 的边积分等于 7 。- 节点 5 和 6 都有指向节点 7 的边,节点 7 的边积分等于 5 + 6 = 11 。节点 7 的边积分最高,所以返回 7 。
  • 示例 2:

    • 输入:edges = [2,0,0,2]
    • 输出:0
    • 解释:- 节点 1 和 2 都有指向节点 0 的边,节点 0 的边积分等于 1 + 2 = 3 。- 节点 0 和 3 都有指向节点 2 的边,节点 2 的边积分等于 0 + 3 = 3 。节点 0 和 2 的边积分都是 3 。由于节点 0 的编号更小,返回 0 。

    提示:

    • n == edges.length
    • 2 <= n <= 105
    • 0 <= edges[i] < n
    • edges[i] != i

代码实现

java 复制代码
class Solution {
    public int edgeScore(int[] edges) {
        // 获取节点数量
        int n = edges.length;
        // 初始化边积分数组,长度为 n,所有值初始化为 0
        long[] ans = new long[n];
        // 初始化最大边积分为最小值,用于比较
        long max = Long.MIN_VALUE;
        // 初始化最大边积分对应的节点索引
        long index = -1;

        // 遍历 edges 数组,计算每个节点的边积分
        for (int i = 0; i < n; i++) {
            int x = edges[i];
            // 将当前节点的编号加到它指向的节点的边积分上
            ans[x] += i;
        }

        // 遍历 ans 数组,找到边积分最大的节点
        for (int j = 0; j < n; j++) {
            // 如果当前节点的边积分大于已知的最大边积分,则更新最大边积分和对应的节点索引
            if (max < ans[j]) {
                max = ans[j];
                index = j;
            }
        }

        // 返回边积分最高的节点的编号
        return (int) index;
    }
}
相关推荐
老码观察19 小时前
设计模式实战解读(六):装饰器模式——功能增强,不动原代码
java·设计模式·装饰器模式
星轨初途19 小时前
【C++ 进阶】list 核心机制解析及 vector 巅峰对决
开发语言·数据结构·c++·经验分享·笔记·list
小侯不躺平.19 小时前
C++ Boost库【6】时间戳整体综合
开发语言·c++·算法
likerhood19 小时前
Java ArrayList 详解:从动态数组到扩容机制与常见陷阱
java·开发语言·windows
Chloeis Syntax19 小时前
JavaEE初阶学习日记(3)---网络初认识
java·网络·笔记·学习
AI人工智能+电脑小能手19 小时前
【大白话说Java面试题 第80题】【Mysql篇】第10题:MySQL 在什么条件下索引失效?
java·开发语言·mysql·adb·面试
还在忙碌的吴小二19 小时前
Spring Boot Examples 学习示例集新手入门指南
java·spring boot·后端·学习·spring
wuweijianlove19 小时前
算法稳定性分析中的输入扰动响应模型的技术6
算法
霸道流氓气质19 小时前
Spring AI 工作流引擎扩展 Human-in-the-Loop 人工审批功能完整实战
java·人工智能·spring
视觉算法小姥19 小时前
yolov11-obb在rk芯片部署的onnx模型输出的剪枝处理
算法·yolo·剪枝