携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情
前言
小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标300题,记录从0到1的全过程!!
第306场周赛-力扣
第306场周赛-力扣
306的第二题还算不难,基本把题目读懂了,就可以做出来了,注意会超int,竞赛时间内会把这个输入案例隐藏。第三题第四题就是干瞪眼了,难顶啊!!!
现在介绍这个题。
6149. 边积分最高的节点
给你一个有向图,图中有 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 <= 105
- 0 <= edges[i] < n
- edges[i] != i
2.解法
这里放一个错误提交
class Solution {
public int edgeScore(int[] edges) {
//key = 节点 value = 积分
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < edges.length; i++) {
if(map.containsKey(edges[i])) {
map.put(edges[i],map.get(edges[i]) + i);
} else {
map.put(edges[i],i);
}
}
int res = 0;
int max = 0;
for (Map.Entry<Integer,Integer> entry : map.entrySet()) {
if (max < entry.getValue()) {
max = entry.getValue();
res = entry.getKey();
} else if (max == entry.getValue()) {
res = Math.min(res, entry.getKey());
}
}
return res;
}
}
这个是正确的
class Solution {
public int edgeScore(int[] edges) {
//key = 节点 value = 积分
HashMap<Integer, Long> map = new HashMap<>();
for (int i = 0; i < edges.length; i++) {
if(map.containsKey(edges[i])) {
map.put(edges[i],map.get(edges[i]) + i);
} else {
map.put(edges[i],(long)i);
}
}
int res = 0;
long max = 0;
for (Map.Entry<Integer,Long> entry : map.entrySet()) {
if (max < entry.getValue()) {
max = entry.getValue();
res = entry.getKey();
} else if (max == entry.getValue()) {
res = Math.min(res, entry.getKey());
}
}
return res;
}
}
解析
大家去吧错误代码执行以下就知道会在哪个输入案例报错了。 这个题也是没什么难度,用一个map集合,记录每个节点和对应指向它的值之和,最后遍历节点,找到值最大的那个节点就可以了。
时间复杂度O(n),在进一步优化也只能在空间复杂度上更改存放的数据类型了。
第一题链接如下
杨小白_leetcode_第306场周赛-第一题2373. 矩阵中的
第三题链接如下
杨小白_leetcode_第306场周赛-第三题6150. 根据模式串构造最小数字
3.结束
这个题作为第二题,算是比较简单的了,这个题平常遇到还算要能做出来的,刷题刷题,每天一道,三年1000道!!!!