【LeetCode通关全记录】1436. 旅行终点站
题目地址👉 1436. 旅行终点站
解法1:结点-出度表(想复杂了)
看到这题第一反应是图,题目中要求的又是出度为0的结点,那么自然而然地就想到了求所有结点的出度并保存在map 中,最后遍历map 并返回出度为0的结点的方法。
详细解法请看注释👇
func destCity(paths [][]string) string {
if len(paths) == 0 {
return ""
}
g := make(map[string]int, 0)
for _, city := range paths {
if _, ok := g[city[0]]; !ok {
g[city[0]] = 1
} else {
g[city[0]] += 1
}
if _, ok := g[city[1]]; !ok {
g[city[1]] = 0
}
}
for k, v := range g {
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)
|