1466. 重新规划路线 --力扣 --JAVA

简介: n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。路线用 connections 表示,其中 connections[i] = [a, b] 表示从城市 a 到 b 的一条有向路线。今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。请你帮助重新规划路线方向,使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。题目数据 保证 每个城市在重新规划路线方向后都能到达城市 0 。

 题目

n 座城市,从 0n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的状况。

路线用 connections 表示,其中 connections[i] = [a, b] 表示从城市 ab 的一条有向路线。

今年,城市 0 将会举办一场大型比赛,很多游客都想前往城市 0 。

请你帮助重新规划路线方向,使每个城市都可以访问城市 0 。返回需要变更方向的最小路线数。

题目数据 保证 每个城市在重新规划路线方向后都能到达城市 0 。

解题思路

    1. 选择一个数据结构数组用来存储可到达0的所有节点,为便于编写首先需添加元素0;
    2. while循环持续遍历整个路径数组,将可到达的添加到数据结构中,记录添加的数量,用来跳出循环(左右指针遍历可能会缩减时间);

    代码展示

    class Solution {
        public int minReorder(int n, int[][] connections) {
            boolean[] road = new boolean[n];
            road[0] = true;
            int count = 1;
            int ans = 0;
            while (count < n){
                for (int[] connection : connections) {
                    //可直接到达或经过其他节点到达
                    if (road[connection[1]]) {
                        if(road[connection[0]]){
                            continue;
                        }
                        road[connection[0]] = true;
                        count++;
                    } else if (road[connection[0]]) {      //不可达则+1
                        ans++;
                        road[connection[1]] = true;
                        count++;
                    }
                }
            }
            return ans;
        }
    }

    image.gif


    目录
    相关文章
    |
    1月前
    |
    算法 Java
    LeetCode(一)Java
    LeetCode(一)Java
    |
    3月前
    |
    算法 Java
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解
    51 6
    |
    3月前
    |
    存储 算法 Java
    LeetCode经典算法题:打家劫舍java详解
    LeetCode经典算法题:打家劫舍java详解
    70 2
    |
    3月前
    |
    人工智能 算法 Java
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    LeetCode经典算法题:井字游戏+优势洗牌+Dota2参议院java解法
    50 1
    |
    3月前
    |
    存储 算法 Java
    LeetCode经典算法题:预测赢家+香槟塔java解法
    LeetCode经典算法题:预测赢家+香槟塔java解法
    60 1
    |
    3月前
    |
    存储 算法 Java
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    LeetCode经典算法题:二叉树遍历(递归遍历+迭代遍历+层序遍历)以及线索二叉树java详解
    79 0
    |
    3月前
    |
    算法 Java
    LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
    LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
    54 0
    |
    3月前
    |
    存储 算法 Java
    LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
    LeetCode初级算法题:两数之和+斐波拉契数列多种java解法
    39 0
    |
    3月前
    |
    算法 Java 索引
    LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
    LeetCode初级算法题:寻找数组的中心索引+x的平方根+三个数的最大乘积+Leetcode 149:直线上最多的点数 Java详解
    36 0
    |
    3月前
    |
    存储 算法 Java
    LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
    LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
    45 0