力扣刷题笔记 → 1436. 旅行终点站

261 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

题目

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

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

示例

输入:paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
输出:"Sao Paulo" 
解释:从 "London" 出发,最后抵达终点站 "Sao Paulo" 。本次旅行的路线是 "London" -> "New York" -> "Lima" -> "Sao Paulo" 。

输入:paths = [["B","C"],["D","B"],["C","A"]]
输出:"A"
解释:所有可能的线路是:
"D" -> "B" -> "C" -> "A""B" -> "C" -> "A""C" -> "A""A". 
显然,旅行终点站是 "A" 。

输入: paths = [["A","Z"]]
输出: "Z"

提示

  • 1 <= paths.length <= 100
  • paths[i].length == 2
  • 1 <= cityAi_i.length, cityBi_i.length <= 10
  • cityAi_i != cityBi_i
  • 所有字符串均由大小写英文字母和空格字符组成。

解题思路

这道简单难度的题目,感觉要考察的重点更多的是在于对数据结构的掌握上。

paths中有且仅有一个终点站,即没有任何可以通往其他城市的线路的城市。反推一下可以得到除了终点站外,其他城市站点都有可以通往的城市。

这里我们可以使用Set来保存其他的城市,用以筛选出终点站。

代码实现

class Solution {
    public String destCity(List<List<String>> paths) {
        Set<String> set = new HashSet<>();

        for(List<String> path : paths){
            set.add(path.get(0));
        }

        for(List<String> path : paths){
            String end = path.get(1);
            if(!set.contains(end)){
                return end;
            }
        }

        return "";
    }
}

复杂度分析

  • 时间复杂度:O(N)O(N)
  • 空间复杂度:O(N)O(N)

最后

文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!

如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!

题目出处: leetcode-cn.com/problems/de…