Github来源:力扣 (LeetCode)|刷题打卡 | 求星星 ✨ | 给个❤️关注,❤️点赞,❤️鼓励一下作者
哪吒人生信条:如果你所学的东西 处于喜欢 才会有强大的动力支撑。
每天学习编程,让你离梦想更新一步,感谢不负每一份热爱编程的程序员,不论知识点多么奇葩,和我一起,让那一颗四处流荡的心定下来,一直走下去,加油,2021
加油!欢迎关注加我vx:xiaoda0423
,欢迎点赞、收藏和评论
时间: 3 月 1 日 ~ 3 月 13 日
- 力扣 (LeetCode)-两数之和,有效的括号,两数相加|刷题打卡-3月1日
- 力扣 (LeetCode)-合并两个有序链表,删除排序数组中的重复项,JavaScript笔记|刷题打卡-3月2日
- 力扣 (LeetCode)-最大子序和,JavaScript数据结构与算法(数组)|刷题打卡-3月3日
- 针对CSS说一说|技术点评-3月4日
- 力扣 (LeetCode)-栈,括号生成 |刷题打卡-3月5日
- 原来也没有那么难!Vue商城开发 | 技术点评-3月6日
- 力扣 (LeetCode)-加一,队列 |刷题打卡-3月7日
- JavaScript数据结构之链表 | 技术点评-3月8日
- JavaScript的数据结构-集合 |技术点评-3月9号
- 力扣 (LeetCode)-合并两个有序数组,字典,散列表|刷题打卡-3月10号
- 力扣 (LeetCode)-对称二叉树,树|刷题打卡
前言
如果这篇文章有帮助到你,给个❤️关注,❤️点赞,❤️鼓励一下作者,接收好挑战了吗?文章公众号首发,关注 程序员哆啦A梦 第一时间获取最新的文章
❤️笔芯❤️~
图
- 图是网络结构的抽象模型。
- 图是一组由边连接的节点(或顶点)
- 一个图
G=(V,E)
由V:一组顶点,E:一组边,连接V中的顶点
- 由一条边连接在一起的顶点称为相邻顶点
- 一个顶点的度是其相邻顶点的数量
- 路径是顶点
v1, v2,…,vk
的一个连续序列,其中vi和vi+1
是相邻的 - 简单路径要求不包含重复的顶点(环也是一个简单路径)
- 如果图中不存在环,则称图为无环的,如果图中每两个顶点间都存在路径,则该图是连通的
- 图可以是无向的(边没有方向)或是有向的(有向图)
- 如果图中每两个顶点间在双向上都存在路径,则该图是强连通的
- 图还可以是未加权的或是加权的
每个节点都和一个整数相关联,该整数将作为数组的索引。
如果索引为i的节点和索引为j的节点相邻,则array[i][j] === 1,否则array[i][j] === 0
- 邻接表的动态数据结构来表示图
- 邻接表由图中每个顶点的相邻顶点列表所组成
- 使用关联矩阵来表示图
- 在关联矩阵中,矩阵的行表示顶点,列表示边
- 关联矩阵用于边的数量比顶点多的情况下,以节省空间和内存
- 字典将会使用顶点的名字作为键,邻接顶点列表作为值
- 一个用来向图中添加一个新的顶点
- 一个方法用来添加顶点之间的边
实现一下Graph
类的toString
方法
- 广度优先搜索
(Breadth-First Search,BFS)
- 深度优先搜索
(Depth-First Search,DFS)
广度优先搜索算法和深度优先搜索算法,只有一点不同,那就是待访问顶点列表的数据结构。
必须追踪每个第一次访问的节点,并且追踪有哪些节点还没有被完全探索
深度优先搜索算法,数据结构是栈,通过将顶点存入栈中,顶点是沿着路径被探索的,存在新的相邻顶点就去访问
广度优先搜索算法,数据结构是队列,通过将顶点存入队列中,最先入队列的顶点先被探索
- 白色,表示该顶点还没有被访问
- 灰色,表示该顶点被访问过,但并未被探索过
- 黑色,表示该顶点被访问过且被完全探索过
问图的一层(就是先宽后深地访问顶点)
示例:
- 使用
BFS
寻找最短路径
题:给定一个图G
和源顶点v
,找出对每个顶点u
,u和v
之间最短路径的距离(以边的数量计)。
思路:对于给定顶点v
,广度优先算法会访问所有与其距离为1
的顶点,接着是距离为2
的顶点,以此类推。
- 从
v
到u
的距离d[u]
; - 前溯点
pred[u]
,用来推导出从v
到其他每个顶点u
的最短路径。
点被访问了,接着原路回退并探索下一条路径(它是先深度后广度地访问顶点)
- 访问顶点
v
- 标注
v
为被发现的(灰色)。 - 对于
v
的所有未访问的邻点w
,访问顶点w
,标注v
为已被探索的(黑色)。
示例:
- 探索深度优先算法
- 顶点
u
的发现时间d[u]
; - 当顶点
u
被标注为黑色时,u
的完成探索时间f[u]
; - 顶点
u
的前溯点p[u]
Dijkstra
算法,是一种计算从单个源到所有其他源的最短路径的贪心算法
题图:
示例:
Floyd-Warshall
算法是一种计算图中所有最短路径的动态规划算法
最小生成树的算法:Prim
算法和Kruskal
算法
104. 二叉树的最大深度
一、题目描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
二、思路分析
- 递归(树是一种递归的数据结构)
二叉数的遍历主要有前中后遍历和层次遍历。 前中后属于 DFS
,层次遍历属于 BFS
DFS
都可以使用栈来简化操作,并且其实树本身是一种递归的数据结构,因此递归和栈对于 DFS
来说是两个关键点
-
队列
-
队列中用
Null
(一个特殊元素)来划分每层,或者在对每层进行迭代之前保存当前队列元素的个数 -
树的基本操作- 遍历 - 层次遍历(
BFS
) -
标签:
DFS
-
找出终止条件:当前节点为空
-
找出返回值:节点为空时说明高度为 0,所以返回 0;节点不为空时则分别求左右子树的高度的最大值,同时加1表示当前节点的高度,返回该数值
-
某层的执行过程:在返回值部分基本已经描述清楚
-
时间复杂度:
O(n)O(n)
三、答案代码
四、总结
回看笔者往期高赞文章,也许能收获更多喔!
- 一个合格的初级前端工程师需要掌握的模块笔记
- Vue.js笔试题解决业务中常见问题
- 【初级】个人分享Vue前端开发教程笔记
- 长篇总结之JavaScript,巩固前端基础
- 前端面试必备ES6全方位总结
- 达达前端个人web分享92道JavaScript面试题附加回答
- 【图文并茂,点赞收藏哦!】重学巩固你的Vuejs知识体系
- 【思维导图】前端开发-巩固你的JavaScript知识体系
- 14期-连肝7个晚上,总结了计算机网络的知识点!(共66条)
- 这是我的第一次JavaScript初级技巧
- localStorage和sessionStorage本地存储
- HTML5中的拖放功能
- 挑战前端知识点HTTP/ECMAScript
- 必学必会-音频和视频
- 前端170面试题+答案学习整理(良心制作)
- 前端HTML5面试官和应试者一问一答
- 哪吒闹海,席卷图文学习前端Flex布局
- 腾讯位置服务开发应用
- 【进阶】面试官问我Chrome浏览器的渲染原理(6000字长文)
- 面试官一上来就问我Chrome底层原理和HTTP协议(万字长文)
- 熬夜总结了 “HTML5画布” 的知识点
- this/call/apply/bind(万字长文)
- HTTP/HTTPS/HTTP2/DNS/TCP/经典题
- 执行上下文/作用域链/闭包/一等公民
- Web页面制作基础
- 学习总结之HTML5剑指前端(建议收藏,图文并茂)
❤️关注+点赞+收藏+评论+转发❤️,原创不易,鼓励笔者创作更好的文章
点赞、收藏和评论
我是Jeskson
(达达前端),感谢各位人才的:点赞、收藏和评论,我们下期见!(如本文内容有地方讲解有误,欢迎指出☞谢谢,一起学习了)
我们下期见!
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!