bobo老师玩转算法面试,如何准备算法面试?

算法面试只是面试中的一个环节

误区

  • 算法面试并没有那么难。
  • 有选择的读《算法导论》等经典书籍,不能追求一步到位,学习切忌完美主义。
  • 高级数据结构和算法面试提及的概率很低。
  • 远达不到信息学竞赛难度

算法面试准备范围

不要轻视基础算法和数据结构,而只关注“有意思”的题目。

  • 各种排序算法
  • 基础数据结构和算法的实现:堆、二叉树、图…
  • 基础数据结构的使用:链表、栈、队列、哈希表、图、Trie、并查集…
  • 基础算法:深度优先、广度优先、二分查找、递归…
  • 基本算法思想:递归、分治、回溯搜索、贪心、动态规划…

选择合适的OJ

  • LeetCode
  • HackerRank

在学习和实践做题之间掌握平衡,不要一味的刷题

解决算法面试问题的整体思路

注意题目的条件

  • 给定一个有序数组… 二分搜索
  • 一些题目中的条件本质是暗示:
    设计一个O(nlogn)的算法。 分治思想
    无需考虑额外的空间。 空间换时间
    数据规模大概是1000。 n*n的复杂度

当没有思路时

  • 自己给几个简单的测试用例,试验一下

  • 不要忽视暴力解法,暴力解法通常是思考的起点

例如:
LeetCode 3 在一个字符串中寻找没有重复字母的最长字串。

  • 对于字符串s的子串s[i,…j]
  • 使用O(n^2)的算法遍历i,j,可以得到所有的子串s[i,…j]
  • 使用O(length(s[i…j]))的算法判断s[i,…j]中是否含有重复字母。

复杂度O(n^3),对于n=100的数据量,可行

优化算法,如何对问题进行优化

  • 遍历常见的算法思路
  • 遍历常见的数据结构
  • 空间和时间的交换(哈希表)
  • 数据预处理(排序)
  • 在瓶颈处寻找优化的位置:O(nlogn) + O(n^2),

实际编写问题
1.极端条件的判断

  • 数组为空
  • 字符串为空
  • 数量为0
  • 指针为NULL

2.变量名

3.模块化,复用性

基本问题达到白板编程的水平

你可能感兴趣的:(玩转算法面试,数据结构,算法)