力扣(leetcode)每日一题 2374 边积分最高的节点

题干

2374. 边积分最高的节点 - 力扣(LeetCode)

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

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

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

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

示例 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 。
解法

看着是图的遍历,但是仔细一看就是一个非常简单的贪心。每次刷新记录最大值刷新最大值就好了。

妥妥的属于简单题

如下

原始代码如下(这是错误的)

第一,这里不需要map,map的效率没有初始化数组高

第二,这里的最大值,会溢出Integer.MAX_VALUE 因此需要用long来记录

java 复制代码
  public static int edgeScore1(int[] edges) {
        int max = 0;
        int maxindex = Integer.MAX_VALUE;
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < edges.length; i++) {
            int edge = edges[i];
            Integer value = map.getOrDefault(edge, 0);
            map.put(edge, value + i);
            if (max < value + i) {
                max = value + i;
                maxindex = edge;
            } else if (max == value + i) {
                if (maxindex > edge) {
                    maxindex = edge;
                }
            }
        }
        return maxindex;
    }

修改后如下

java 复制代码
public static int edgeScore(int[] edges) {
        long[] dp = new long[edges.length]; // 随便取的名字
        long max = 0;
        int maxindex = Integer.MAX_VALUE;
        for (int i = 0; i < edges.length; i++) {
            int edge = edges[i];   // 取出指向的点
            dp[edge] += i;     // 指向的点的累计加上i值
            if (max < dp[edge]) {    // 更新最大值
                max = dp[edge];
                maxindex = edge;
            } else if (max == dp[edge]) {  // 当前值和最大值相等判断下下标哪个更小
                if (maxindex > edge) {
                    maxindex = edge;
                }
            }
        }
        return maxindex;
    }
相关推荐
武昌库里写JAVA1 小时前
人工智能不是人工“制”能
c语言·开发语言·数据结构·算法·二维数组
buaichifanqie2 小时前
离散化算法
c++·算法·离散化
凌肖战3 小时前
力扣上刷题之C语言实现-Day2
c语言·算法·leetcode
sp_fyf_20243 小时前
计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-15
论文阅读·人工智能·算法·搜索引擎·语言模型·自然语言处理
2401_857297914 小时前
招联金融内推(深圳武汉大量招后端、算法)---2025秋招内推
java·前端·算法·金融·求职招聘
非常规定义M4 小时前
Day30_0.1基础学习MATLAB学习小技巧总结(30)——优化工具箱及
开发语言·人工智能·学习·算法·数学建模·matlab
柠檬少少开发4 小时前
碎纸片的自动拼接复原技术
人工智能·算法·计算机视觉
2401_857297915 小时前
招联金融秋招内推喇--18薪
java·前端·算法·金融·求职招聘
larryyu_cs5 小时前
CF1494F Delete The Edges 题解
c++·算法·图论