码迷,mamicode.com
首页 > 其他好文 > 详细

剑指Offer复盘(五)——面试思路

时间:2020-07-26 23:14:35      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:问题:   问题   适合   个人   顺序   rand   创建   利用   反序   

面试思路

这部分其实说的很好,算法是能力,但是面试是“技巧+能力”。面试不能够充分反应一个人的算法水平,但是配合一些技巧可以帮助展现出自己的水平。结合书中内容和自己的做题,总结了以下内容:

  • 画图把问题具体化,比较适合栈与队列、树、图的问题
  • 没有思路时记得举例子,从中发现规律
  • 把新的问题通过转化变成小规模问题/自己已知的问题,然后再解决

面试题27

二叉树镜像操作。首先要理解镜像的概念,为了形象化,可以画图,指的是左右交换,并且左子树右子树也对应交换,显然是一种递归的操作。

面试题28

判断对称二叉树。首先要理解对称的概念。此时问题转化为比较镜像二叉树和原二叉树是否相等——判断两个二叉树是否相同——利用递归定义判断即可。需要注意一个特殊情况是两个树都没有某个节点时的情况。

面试题29

打印路径,没有别的技巧,只是循环边界条件的处理。可以手动画一个小的图,写出转折点,找规律。

面试题30

求栈中元素的最小值。类似单调栈,使用一个普通栈+一个单调栈储存降序数据。

面试题31

构造一个栈,直接模拟即可。

面试题32

二叉树层序遍历。使用队列实现。

面试题33

BST的判断问题,使用递归实现,主要是考虑递归函数中什么时候需要返回false(该子树不满足BST性质的时候),还可以用单调栈实现,有待进一步学习。

面试题34

还是二叉树上的操作。首先要读懂题意,这个路径指的是从根到叶的路径,而不是任意一条路径。因此判定的时候要保证节点无左右子树,且路径之和满足要求。使用DFS可以解决。

面试题35

从35到38题都是关于复杂问题的分析。从横向看,问题可以分解为多个不同的小问题依次解决,从纵向看,问题可以使用分治的思想,变成多个问题规模较小的同样问题。这些问题难度通常较大。

 

看了相关题解,35题可以使用原地修改的方法进行复制,不需要额外的空间。方法是创建一系列相同的链表节点,每个节点串在原始节点后面,之后更新random指针,最后再分离两个链表。书中的做法是hash,但是hash要储存新节点与原节点的配对关系,需要额外空间。

面试题36

DFS的过程中处理新链表,需要熟悉树遍历的顺序,同时使用全局变量处理一下最左节点。

面试题37

序列化二叉树问题:首先要明确一下序列化的概念,序列化只需要能够变成一维字符串并且复原回来就可以,并非等价于完全二叉树层序遍历的顺序,此处需要研究一下给出的例子。之后就用层序遍历进行模拟即可,需要注意的是反序列化的时候需要处理‘,‘分割的结果,这个在C++里面有点繁琐。

当然还有一些细节的地方就是字符串转int和int转字符串。

面试题38

字符串的全排列,很自然想到树搜索中的排列树,因此需要DFS,同时记录访问过的节点。无额外剪枝手段。

 

剑指Offer复盘(五)——面试思路

标签:问题:   问题   适合   个人   顺序   rand   创建   利用   反序   

原文地址:https://www.cnblogs.com/hesun/p/13381786.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!