IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 【LeetCode通关全记录】1436. 旅行终点站 -> 正文阅读

[数据结构与算法]【LeetCode通关全记录】1436. 旅行终点站

【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)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 15:06:48  更:2021-10-02 15:09:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 12:33:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码