分享|2021秋招算法总结2-BFS篇
14431
2020.12.15
2021.08.09
发布于 未知归属地

置顶科普

年份是毕业年份,2021是指2021年毕业,不是2021年面试

鲂的2021秋招算法总结目录(已完结)

1. 分享|2021秋招算法总结1-DFS篇
2. 分享|2021秋招算法总结2-BFS篇
3. 分享|2021秋招算法总结3-链表篇
4. 分享|2021秋招算法总结4-二叉树篇
5. 分享|2021秋招算法总结5-排序算法篇
6. 分享|2021秋招算法总结6-字符串篇

  1. 分享|2021秋招算法总结7-双指针篇
  2. 分享|2021秋招算法总结8-哈希篇
  3. 分享|2021秋招算法总结9-位运算
  4. 分享|2021秋招算法总结10-数组篇
  5. 分享|2021秋招算法总结11-动规篇
  6. 分享|2021秋招算法总结12-栈篇

鲂的2021秋招经验总结(不定时更新)

1. 分享|2021届毕业生秋招经验总结1-岗位类别介绍
2. 分享|2021届毕业生秋招经验总结2-如何选择offer

鲂的面经整理目录(已完结)

1. 美团金融|安卓客户端|面经|offer|2021届秋招|
2. 拼多多|客户端开发|面经|offer|2021届秋招|
3. 网易云音乐|安卓客户端|面经|offer|2021届秋招|
4. 阿里巴巴|客户端开发|面经|2021届秋招|
5. 花旗银行|软件工程师|面经|offer|2021届秋招|
6. 字节跳动|客户端开发|面经|2021届秋招|
7. 叠纸游戏|客户端开发|面经|2021届秋招|
8. 腾讯|客户端开发|面经|2021届秋招|
9. 360|安卓客户端|面经|offer|2021届秋招|
10. 作业帮|IOS客户端|面经|2021届秋招|
11. 滴滴|安卓客户端|面经|2021届秋招|
12. 百度|IOS客户端|面经|2021届秋招|
13. 快手|客户端开发|面经|2021届秋招|
14. 顺丰科技|安卓客户端|面经|offer|2021届秋招|

鲂的内推

1. 内推+校招秋招|美团金融服务平台|多项岗位|北京+上海

本篇概要

本篇中的题目只是说可以利用BFS(Breadth First Search,广度优先搜索)的方法解决,而不是只能用这个方法解决。在某些大佬的题解中,甚至可以用三四种方式解决这个类型的题目,有兴趣的可以多翻一翻题解区高阅读量高赞或者标注为精选的题解哈。其实BFS在面试中出现的频率不如链表和树之类的知识点来的高,因为写清楚需要较长时间,但某些面试官会问面试者这类题目的思路是什么样的,所以理解此类题目的思路是非常重要的,起码自己回答的时候需要列点回答。

关于面试者的提前准备工作,建议视自身情况来定,如果说时间不够或者不能完全掌握所有知识点的,建议择其一记忆即可(选自己能理解的方法记忆,而不是一味选择最优解记忆)。学有余力的同学可以看看多种思路,开拓思维方式,方便自己在面试官面前装逼(注意别翻车就行)。

给定网格的题目

方法很多,例如:DFS、BFS和并查集。

  1. 130. 被围绕的区域:给定一个二维的矩阵,包含 'X' 和 'O'(字母 O)。找到所有被 'X' 围绕的区域,并将这些区域里所有的 'O' 用 'X' 填充。
    这题可以用的方法很多,常见的有DFS、BFS和并查集,其中并查集这种数据结构看似不经常用,实际上分析此类题目时候会发挥比较好的作用。
  2. 200. 岛屿数量:给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。
    同样也是可以用多种方法的一题。提升:可以思考下如果输入的不是char,而是int的话,该怎么处理。
  3. 695. 岛屿的最大面积:给定一个包含了一些 0 和 1 的非空二维数组grid。一个岛屿是由一些相邻的1(代表土地)构成的组合,这里的「相邻」要求两个1必须在水平或者竖直方向上相邻。你可以假设grid的四个边缘都被0(代表水)包围着。找到给定的二维数组中最大的岛屿面积。
  4. 面试题 16.19. 水域大小:你有一个用于表示一片土地的整数矩阵land,该矩阵中每个点的值代表对应地点的海拔高度。若值为0则表示水域。由垂直、水平或对角连接的水域为池塘。池塘的大小是指相连接的水域的个数。编写一个方法来计算矩阵中所有池塘的大小,返回值需要从小到大排序。
    提升:做完可以与上一题对比下异同点。
  5. 1162. 地图分析:你现在手里有一份大小为NxN的网格grid,上面的每个单元格都用0和1标记好了。其中0代表海洋,1代表陆地,请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的。
  6. 994. 腐烂的橘子:每分钟,任何与腐烂的橘子(在 4 个正方向上)相邻的新鲜橘子都会腐烂。返回直到单元格中没有新鲜橘子为止所必须经过的最小分钟数。

拓扑排序的题目

不算BFS,只是思路类似。

  1. 207. 课程表:你这个学期必须选修numCourse门课程,记为0到numCourse-1 。在选修某些课程之前需要一些先修课程。 例如,想要学习课程0,你需要先完成课程1,我们用一个匹配来表示他们:[0,1]。给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?
  2. 210. 课程表 II:现在你总共有n门课需要选,记为0到n-1。在选修某些课程之前需要一些先修课程。例如,想要学习课程0,你需要先完成课程1,我们用一个匹配来表示他们: [0,1]。给定课程总量以及它们的先决条件,返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回一种就可以了。如果不可能完成所有课程,返回一个空数组。
    提升:本地编译环境试试返回所有正确的顺序。(返回值类型改变)
  3. 630. 课程表 III:这里有n门不同的在线课程,他们按从1到n编号。每一门课程有一定的持续上课时间(课程时间)t以及关闭时间第d天。一门课要持续学习t天直到第d天时要完成,你将会从第1天开始。给出n个在线课程用(t, d)对表示。你的任务是找出最多可以修几门课。
    此题可以用拓扑排序,但是可能贪心更方便,题目较难,放在这就是为了系列题好看而已,看不懂的建议直接跳过。

染色的题目

不算BFS,只是思路类似。

  1. 733. 图像渲染:有一幅以二维整数数组表示的图画,每一个整数表示该图画的像素值大小,数值在 0 到 65535 之间。给你一个坐标 (sr, sc) 表示图像渲染开始的像素值(行 ,列)和一个新的颜色值 newColor,让你重新上色这幅图像。
  2. 面试题 08.10. 颜色填充:题目名称和题目叙述与上一题不太一样,代码可以一模一样。
  3. 1042. 不邻接植花:有 n 个花园,按从 1 到 n 标记。另有数组 paths ,其中 paths[i] = [xi, yi] 描述了花园 xi 到花园 yi 的双向路径。在每个花园中,你打算种下四种花之一。另外,所有花园最多有3条路径可以进入或离开。你需要为每个花园选择一种花,使得通过路径相连的任何两个花园中的花的种类互不相同。
    本质上也是个染色问题。

并查集的题目

很多可以用并查集的题目都可以用dfs和bfs做,因为我并查集学废了,所以指向一个我觉得整理的很棒的链接。
官方题解写的399. 除法求值,这篇题解的最后列了很多类似的练习题,学有余力的同学可以做一下哈。
备注:这类题目在笔试中可能较高频率出现,在面试中通常是面试官水平比较高且觉得面试者水平比较高的时候才可能给面试者出。

结束语

这篇的题目虽然套的是BFS,实际上解法是有很多的,大家量力而行即可。笔试会经常遇到这类题目,但普通面试者在面试过程中遇到这类题目的概率不大,因为写代码需要很长时间,有可能遇到让你说思路的面试官,所以思维方式需要好好掌握。

评论 (3)