Tagged in

面试

深度优先搜索 & 宽度优先搜索

什么时候使用BFS:

  • 图的遍历
    • 分层的图的遍历(简单图的最短路径)
    • 通过一个点,找到图的所有的点,这个用DFS和BFS都可以,如果是图的话,用DFS,很可能导致递归深度太深。
    • 拓扑排序
  • 最短路径
  • 简单图的最短路径(简单图:每条边长度都是1,并且没有方向)

BFS题

BinaryTree Level Order Traversal
  • lintcode中binary Tree的testCase:https://www.lintcode.com/help/binary-tree-representation/
  • 非python一般用linkedList来做queue
  • 可以用lintcode里面queue的题目来对queue做一下专门练习
Binary Tree Serialization

图上的宽度优先搜索

什么时候使用DFS:

- 当题目目的是找到问题的<b>所有方案</b>的时候用DFS(subsets)
- 深搜只要搜索就行了,只需要存储当前路径(栈),宽搜是需要保存状态的

递归三要素:

- 递归的定义:接收什么参数,返回什么值 …

strstr以及面试技巧

面试

面试一般的问题:

  • KMP算法(字符串匹配),但是一般面试就是使用两重循环就可以解决,不会直接考比较复杂的算法。一般先用简单方式解决之后才会看是否会扩展
  • 自己的算法经验不应该写在resume里面,因为会加大面试官对题目的考察难度
  • 面试的时候,要注意自己的coding style,另外就是变量命名不要a/b/x/y等
  • 注意参数检查,input是否是None?array长度是否是0?
  • 与面试班可以讨论,不要自己在那里写代码

面试考察的基本功

  • 程序风格(缩进、括号、变量名)
  • Coding习惯(异常检查、边界处理)
  • 沟通(让面试官立刻明白你的意图)
  • 测试(主动些出合理的TestCase)(比如有可能输入有两个空字符串等等)

如何刷题:

  • 总结和归类相似问题
  • 找出适合同一类型的题目模板

题目

排列组合问题题目

给一个结合如[1,2,3],找出所有的非降序排列
S = [1,2,3],则返回 …