边积分最高的节点

简介: 边积分最高的节点

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

题目描述

给你一个有向图,图中有 n 个节点,节点编号从 0 到 n - 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 。

示例 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 <= 10^5
  • 0 <= edges[i] < n
  • edges[i] != i

思路分析

首先我们应该要先读懂题意,知道题目要求我们做什么。题目会给我们一个有向图,图中有 n 个节点,节点编号从 0 到 n - 1 ,其中每个节点都 恰有一条 出边。我们需要统计每个节点的边积分,那么在这里的边积分是怎么定义的呢?题目的定义是这样的:所有存在一条指向节点 i 的边的节点的 编号 总和。所以我们可以使用一个hash表来记录每一个节点的边积分,只需要遍历每一个节点,将其出边的节点积分加上当前节点的编号,找出其中边积分最高的节点。如果多个节点的 边积分 相同,返回编号 最小 的那个。

  • 1、使用hash表记录每个节点边积分
let map = {},max = 0,res = 0;
  • 2、遍历计算边积分
for(let i = 0; i < edges.length; i++){
    map[edges[i]] = (map[edges[i]] || 0) + i;
    ……
}
  • 3、更新边积分最高的节点
if(map[edges[i]] > max){
    max = map[edges[i]];
    res = edges[i];
}else if(map[edges[i]] == max){
    if(res > edges[i]){
        res = edges[i];
    }
}

完整代码如下:

AC代码

/**
 * @param {number[]} edges
 * @return {number}
 */
 var edgeScore = function(edges) {
     let map = {},max = 0,res = 0;
     for(let i = 0; i < edges.length; i++){
         map[edges[i]] = (map[edges[i]] || 0) + i;
         if(map[edges[i]] > max){
             max = map[edges[i]];
             res = edges[i];
         }else if(map[edges[i]] == max){
             if(res > edges[i]){
                 res = edges[i];
             }
         }
     }
     return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
6月前
|
算法
【优选算法】——Leetcode——LCR 179. 查找总价格为目标值的两个商品
【优选算法】——Leetcode——LCR 179. 查找总价格为目标值的两个商品
|
11月前
|
人工智能 算法 BI
C++深度优先(DFS)算法的应用:收集所有金币可获得的最大积分
C++深度优先(DFS)算法的应用:收集所有金币可获得的最大积分
|
机器人 计算机视觉
积分和微分电路的介绍
标题:积分和微分电路的原理与应用 一、引言 积分和微分是微积分学中的两个重要概念,它们在电路中的应用也非常广泛。积分电路可以对输入信号进行积分运算,实现信号的累积效果;而微分电路则可以对输入信号进行微分运算,实现信号的变化率分析。本文将介绍积分和微分电路的原理和应用。 二、积分电路 1. 基本原理 积分电路是一种能够对输入信号进行积分运算的电路。其基本原理是利用电容器的充放电过程来实现积分运算。当输入信号经过电容器后,电容器会根据输入信号的大小和时间长度进行充电或放电,从而实现输入信号的积分效果。 2. 电路结构 积分电路一般由电阻和电容器组成。输入信号经过电阻后,与电容器相连,形成一个
402 0
算法练习Day43|● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
算法练习Day43|● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
|
算法
红包随机算法,给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。...
红包随机算法,给定一定的金额,一定的人数,保证每个人都能随机获得一定的金额。...
226 0
|
算法
银行算法问题积分抽奖解答
银行算法问题抽奖解答
86 0
银行算法问题积分抽奖解答
|
算法 数据建模
最小费用最大流问题详解
最小费用最大流问题详解
900 0
最小费用最大流问题详解
宜搭 库存数和出库数检验,出库大于库存就阻断
宜搭 如何实现提交数据时才获取库存进行比较
宜搭 库存数和出库数检验,出库大于库存就阻断
|
存储
【每日一题Day75】LC1801积压订单中的订单总数 | 优先队列
思路:使用两个优先队列存储类型为buy或者sell的积压订单,根据规则删除积压订单,并统计积压订单的数量,最后返回结果即可
58 0
某商品有2种不同数量的包装,对应不同的价格;同时提供满200元减50元的不限量购物券,试求解最好购买策略,在单次购买中以最低总价购买正好500个商品
某商品有2种不同数量的包装,对应不同的价格;同时提供满200元减50元的不限量购物券,试求解最好购买策略,在单次购买中以最低总价购买正好500个商品
106 0