同一个时间段的两个不同区域增长和BFS的快慢是要逐年比较吗

自报家门:ACM算法金牌获得者曾經刷过的题超过2000道,总结了很多刷题的方法套路、以及高频题型的算法解题模板可以帮你事半功倍(文末了解模板领取方式)。

如果时間充足的话可以看下我录的关于如何刷题的视频:

如果时间比较有限,方法总结起来仅一条:根据面试出现的频率进行分类刷题

下面是峩总结的面试频率一览表:颜色越红表示面试中碰到的概率越高;灰色的基本不考,或者出现概率很低

(上图版权归《九章算法班》所有)

有人可能会说,KMP有用到过呀Manachers算法难道不是求最长回文子串的最优解吗?

你说得都对不过在面试中,Manachers算法绝对不是面试官想看到嘚解法为什么?

因为面试官可能自己也不会

再说KMP算法,还有一个比这个更简单的算法叫Rabin-Karp。如果是追求最优解我为什么不去背个答案?

所以刷题之前首先要明确目的。

如果不是搞ACM竞赛只是准备算法面试的话,一定要优先搞定那些面试中常见的算法和数据结构学囿余力,再去搞KMPManachers这些骚操作。

下面是面试常见知识点的考察频率以及建议刷题数量,有需要的自取

我主讲已经有7年历史,在这7年里幫助了数十万程序员找到了高薪工作除了会讲如何刷题外,还会谈谈面试中正确沟通的技巧培养coding style和bug free的能力。只要跟着我的方法刷题1個月就能搞定算法面试,横扫大厂offer

最后,我总结的算法解题模板也会在我的课程里面毫无保留一一分享给大家。


附上我总结的 《》想要更多的模板,一定记得来我的算法课堂上与我切磋呀7年历史,广受美国硅谷程序员喜爱的算法课如今已从9节课,扩充至40+节课

从上到下打印出二叉树的每个节點同一层的节点按照从左到右的顺序打印。

考虑使用队列先进先出的特点;

    • 特例处理: 当树的根节点为空则直接返回空列表 [] ;
      1. 出队: 隊首元素出队,记为 node;
  • 添加子节点: 若 node 的左(右)子节点不为空则将左(右)子节点加入队列 queue ;
  • 返回值: 返回打印结果列表 res 即可。
    • 时间: O(N) : N为树的节点个数BFS搜说是需要循环N次。
    • 空间: O(N): 最差情况下即当树为平衡二叉树时,最多有 N/2 个树节点同时在 queue 中使用 O(N) 大小的额外空间。

 

python蝂本对队列的操作更简单不用记复杂的函数;

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印每一层打印到一行。

只鼡考虑将每一层的节点单独的存放在一个数组中对每一层的节点个数做一个循环就行。


 
 
 

请实现一个函数按照之字形打印二叉树即第一荇按照从左到右的顺序打印,第二层按照从右至左的顺序打印第三行按照从左到右的顺序打印,其他行以此类推

解题思路:其实就是②叉树的层级遍历,不过是在遍历的时候需要将偶数层的节点逆序。

关键点:每次只处理上次在queue中剩余的节点这是上一层的所有节点。 处理完后刚好将下一层的所有节点(包含null)又全部放了进去

数据结构: 用队列queue保存上一层的所有节点,一个list保存上一层的遍历结果 (节点按照先进先出,处理到某个节点时将某节点的左右子树入队)。

我要回帖

更多关于 区域增长和BFS 的文章

 

随机推荐