【LeetCode】1436. 旅行终点站

124 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

1436. 旅行终点站

给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。

题目数据保证线路图会形成一条不存在循环的线路,因此恰有一个旅行终点站。

「示例1:」
输入:paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
输出:"Sao Paulo" 
解释:从 "London" 出发,最后抵达终点站 "Sao Paulo" 。本次旅行的路线是 "London" -> "New York" -> "Lima" -> "Sao Paulo"
「示例2:」
输入:paths = [["B","C"],["D","B"],["C","A"]]
输出:"A"
解释:所有可能的线路是:
"D" -> "B" -> "C" -> "A""B" -> "C" -> "A""C" -> "A""A". 
显然,旅行终点站是 "A"
「示例3:」
输入:paths = [["A","Z"]]
输出:"Z"
「提示:」
1. 1 <= paths.length <= 100
2. paths[i].length == 2
3. 1 <= cityAi.length, cityBi.length <= 10
4. cityAi != cityBi
5. 所有字符串均由大小写英文字母和空格字符组成。

解题思路

首先,对于一个paths[i] = [cityAi, cityBi],若该城市出现在cityAi中,则必定定会通向cityBi;同时终点站肯定会在cityBi中;
​
所以,我们只要找到cityBi中没有在cityAi中出现过的即可;
​
具体实现:
​
将所有起点放入集合set中;
​
遍历所有终点,不在集合中的就是终点站;

代码实现

/**
 * @param {string[][]} paths
 * @return {string}
 */
const destCity = paths => {
    const set = new Set();
    const len = paths.length;
    for (let i = 0; i < len; i++) {
        // 将所有起点放入集合
        set.add(paths[i][0]);
    }
    for (let i = 0; i < len; i++) {
          // 遍历所有终点,不在集合中的就是终点站
          if (!set.has(paths[i][1])) return paths[i][1];
        }
    };

如果你对这道题目还有疑问的话,可以在评论区进行留言;