【每日一题】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;
    }
}
相关推荐
极光代码工作室2 小时前
基于SpringBoot的课程预约系统
java·springboot·web开发·后端开发
圣保罗的大教堂2 小时前
leetcode 3517. 最小回文排列 I 中等
leetcode
土豆.exe2 小时前
Fastjson2 2.0.53 哈希碰撞 RCE:从原理到三种打法
算法·哈希算法
Leighteen3 小时前
`try-finally` 里的 `return`:为什么 `finally` 会悄悄改掉返回值、吞掉异常
java·开发语言
黄河123长江3 小时前
有限Abel群的结构()
算法
阿米亚波3 小时前
【C++ STL】std::unordered_multimap
开发语言·数据结构·c++·笔记·stl
名字还没想好☜3 小时前
Go 的 time.After 在 select 循环里内存泄漏:定时器堆积原理与 timer.Reset 正确姿势
java·数据库·golang·go·goroutine
Jerry3 小时前
LeetCode 92. 反转链表 II
算法
骊城英雄4 小时前
Rust从入门到精通-trait
人工智能·算法·rust
圆山猫4 小时前
[Virtualization](三):RISC-V H-extension 与 Guest 执行模式
android·java·risc-v