leetcode力扣刷题系列——【旅行终点站】

题目

给你一份旅游线路图,该线路图中的旅行线路用数组 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 <= paths.length <= 100

paths[i].length == 2

1 <= cityAi.length, cityBi.length <= 10

cityAi != cityBi

所有字符串均由大小写英文字母和空格字符组成。

答案

我的方法

博主能力有限,用了非常笨的方法,就是遍历,无止境的遍历,直道找到一个准确的为止,耗费的资源特别多。堪称屎山代码。大家还是看看后面官方给的答案吧~~~~

python 复制代码
 list1=[paths[0]]
        list2=[]
        x = paths[0][1]
        paths.pop(0)
        a=1
        for i,j in enumerate(paths):
            if x == paths[i][0]:
                x=paths[i][1]
                list1.append(j)
            else:
                list2.append(j)
        if len(paths)+1 == len(list1):
            return x
        else:
            while 1:
                for i,j in enumerate(list2):
                    if x == list2[i][0]:
                        x=list2[i][1]
                        list1.append(j)
                if len(list1)==len(paths)+1:
                    return x
                a+=1
                if a>=len(list2):
                    return x

官方的方法

官方不愧是官方,这个方法让我汗颜,简简单单两句话就搞定了我十几句话的代码。而且速度也很快!!

思路与算法

根据终点站的定义,终点站不会出现在cityAi中,因为存在从cityAi出发的线路,所以终点站只会出现在cityBi中。据此,我们可以遍历cityBi,返回不在cityAi中的城市,即为答案。

代码实现时,可以先将所有cityAi存于一哈希表中,然后遍历cityBi并查询 cityBi是否在哈希表中。

python 复制代码
class Solution(object):
    def destCity(self, paths):
        """
        :type paths: List[List[str]]
        :rtype: str
        """
        citiesA = {path[0] for path in paths}
        return next(path[1] for path in paths if path[1] not in citiesA)

作者:力扣官方题解
链接在这里!

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

相关推荐
j_xxx404_25 分钟前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表
南莺莺29 分钟前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·
Lris-KK37 分钟前
【Leetcode】高频SQL基础题--180.连续出现的数字
sql·leetcode
THMAIL1 小时前
深度学习从入门到精通 - 神经网络核心原理:从生物神经元到数学模型蜕变
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
珍珠是蚌的眼泪1 小时前
LeetCode_位运算
leetcode·位运算·异或·韩明距离·数字的补数
野犬寒鸦1 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
墨染点香1 小时前
LeetCode 刷题【61. 旋转链表】
算法·leetcode·职场和发展
岁忧1 小时前
(LeetCode 面试经典 150 题) 200. 岛屿数量(深度优先搜索dfs || 广度优先搜索bfs)
java·c++·leetcode·面试·go·深度优先
一枝小雨1 小时前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题
Tisfy2 小时前
LeetCode 3516.找到最近的人:计算绝对值大小
数学·算法·leetcode·题解