[杨小白]_leetcode_力扣_第 322 场周赛-第三题

124 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第16天,点击查看活动详情

前言

小白算法比较菜,希望能激励我每日更新,从leetcode第一题开始,2022年目标1900分,现在1916!!

力扣第 322 场周赛-力扣

第 322 场周赛

周日打周赛的人都不多了,之前周赛都有6000来人打,可能现在秋招结束了吧,都快跌破5000了。

image.png

感觉我只能稳定在第600+名左右了

这是321场周赛和92双周赛的排名

image.png

image.png

2492. 两个城市间路径的最小分数

给你一个正整数 n ,表示总共有 n 个城市,城市从 1 到 n 编号。给你一个二维数组 roads ,其中 roads[i] = [ai, bi, distancei] 表示城市 ai 和 bi 之间有一条 双向 道路,道路距离为 distancei 。城市构成的图不一定是连通的。

两个城市之间一条路径的 分数 定义为这条路径中道路的 最小 距离。

城市 1 和城市 n 之间的所有路径的 最小 分数。

注意:

一条路径指的是两个城市之间的道路序列。

一条路径可以 多次 包含同一条道路,你也可以沿着路径多次到达城市 1 和城市 n 。

测试数据保证城市 1 和城市n 之间 至少 有一条路径。

示例1:

image.png

输入:n = 4, roads = [[1,2,9],[2,3,6],[2,4,5],[1,4,7]]

输出:5

解释:城市 1 到城市 4 的路径中,分数最小的一条为:1 -> 2 -> 4 。这条路径的分数是 min(9,5) = 5 。

不存在分数更小的路径。

示例 2:

输入:n = 4, roads = [[1,2,2],[1,3,4],[3,4,7]]

输出:2

解释:城市 1 到城市 4 分数最小的路径是:1 -> 2 -> 1 -> 3 -> 4 。这条路径的分数是 min(2,2,4,7) = 2 。

提示:

  • 2 <= n <= 105
  • 1 <= roads.length <= 105
  • roads[i].length == 3
  • 1 <= ai, bi <= n
  • ai != bi
  • 1 <= distancei <= 104
  • 不会有重复的边。
  • 城市 1 和城市 n 之间至少有一条路径。

代码

经典图问题,理解一下题目,就是从1走到n,可以绕路,求最短的一段小路径的值。

两种方法

  1. 并查集,就算查和节点1在同一个集合内的,最短的子路径
  2. dfs,从1出发,找到能到达的,最短的子路径。更新res就可以了。
class Solution {
        int res = 100000;

        public int minScore(int n, int[][] roads) {
            ArrayList<int[]>[] graph = new ArrayList[n + 1];
            for (int i = 0; i < graph.length; i++) {
                graph[i] = new ArrayList<int[]>();
            }
            for (int i = 0; i < roads.length; i++) {
                int a = roads[i][0];
                int b = roads[i][1];
                int len = roads[i][2];
                graph[a].add(new int[]{b , len});
                graph[b].add(new int[]{a , len});
            }
            res = 100000;
            int[] vis = new int[n + 1];
            dfs(graph, vis, 1);
            return res;
        }

        private void dfs(ArrayList<int[]>[] graph, int[] vis, int o) {
            if (vis[o] == 1) {return;}
            vis[o] = 1;
            ArrayList<int[]> arrayList = graph[o];
            for (int i = 0; i < arrayList.size(); i++) {
                res = Math.min(res, arrayList.get(i)[1]);
                dfs(graph, vis, arrayList.get(i)[0]);
            }
        }
    }

3.结束

三题手速场,第四题一直没想出来。

image.png