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

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

题目描述

给定一个有向图,图中包含 n 个节点,节点编号从 0 到 n - 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;
    }
}
相关推荐
liminla!9 分钟前
SQL 从入门到进阶:语法速查与实战练习(完整优化版)
数据库·sql·算法
tongyiixiaohuang15 分钟前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
鱼宵1 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
学长毕设1 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端
维克兜率天1 小时前
【维克】指数调整:哪些股票会被“强制买入“?
人工智能·python·算法
刚入门的大一新生1 小时前
Linux-线程互斥
java·开发语言
罗西的思考2 小时前
【轻量化复刻大模型】线性注意力交互式演示
人工智能·算法·机器学习
赵小哥要冲啦2 小时前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
xiaogai_gai2 小时前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
神也畏惧菠萝2 小时前
Day08 Python流程控制从入门到上瘾:if/match/while/for四件套,从B站登录一路打到猜数字游戏
python·算法·数据存储·for·while·if·ifelse