美文网首页
【LeetCode通关全记录】1436. 旅行终点站

【LeetCode通关全记录】1436. 旅行终点站

作者: NoelleMu | 来源:发表于2021-10-01 22:16 被阅读0次

【LeetCode通关全记录】1436. 旅行终点站

题目地址👉 1436. 旅行终点站

解法1:结点-出度表(想复杂了)

看到这题第一反应是图,题目中要求的又是出度为0的结点,那么自然而然地就想到了求所有结点的出度并保存在map中,最后遍历map并返回出度为0的结点的方法。

详细解法请看注释👇

func destCity(paths [][]string) string {
  // path数组的第一个参数为起点,第二个参数为终点
    // 那么我们就可以建立一个map,key为城市(结点),value为从该城市出发的线路条数(出度)
    // 遍历二维数组中的每一条路线
    // 若起点不在map中,则把起点放入map并置出度为1
    // 若终点不在map中,则把终点放入map并置出度为0
    // 若起点在map中,则把对应起点的出度加1
    // 若终点在map中,则不做任何处理
    // 最后返回出度为0的结点名称即可
    if len(paths) == 0 {
        return ""
    }
    g := make(map[string]int, 0)
    for _, city := range paths {
        if _, ok := g[city[0]]; !ok {
            // 若起点不在map中,则把起点放入map并置出度为1
            g[city[0]] = 1
        } else {
            // 若起点在map中,则把对应起点的出度加1
            g[city[0]] += 1
        }
        // 若终点不在map中,则把终点放入map并置出度为0
        if _, ok := g[city[1]]; !ok {
            g[city[1]] = 0
        }
    }
    for k, v := range g {
        // 最后返回出度为0的结点名称即可
        if v == 0 {
            return k
        }
    }
    return ""
}

执行用时: 4 ms(超过85%的Golang提交记录)

内存消耗: 4 MB(超过31%的Golang提交记录)

时间复杂度:O(n)

空间复杂度:O(n)

解法2:哈希表的正确使用方法(官方解法)

我本来以为我想到的解法是一个比较正常的解法,但是看了官方题解之后我发现我想的实在是太复杂了,果然感冒的时候就应该好好休息不要刷题。。。

官方解法的思路其实很简单:因为一条线路的起点站是path[0],终点站是path[1],所以在path[1]中出现而没有在path[0]中出现的结点就是我们要求的终点站了。

func destCity(paths [][]string) string {
  // 官方解法,建哈希表,比我自己想的要简单
    if len(paths) == 0 {
        return ""
    }
    s := make(map[string]bool, 0)
    for _, route := range paths {
        s[route[0]] = true
    }
    for _, route := range paths {
        if _, ok := s[route[1]]; !ok {
            return route[1]
        }
    }
    return ""
}

执行用时: 4 ms(超过85%的Golang提交记录)

内存消耗: 3.9 MB(超过64%的Golang提交记录)

时间复杂度:O(n)

空间复杂度:O(n)

相关文章

网友评论

      本文标题:【LeetCode通关全记录】1436. 旅行终点站

      本文链接:https://www.haomeiwen.com/subject/trxpnltx.html