算法面试(一)

学习刘宇波老师的算法面试课,记个笔记!

课程目标(我的目标):面对算法问题时,有一个合理的思考路径,不畏惧算法!

 

对算法面试而言:

不一定需要正确的回答每一个算法问题,但是合理的思考方向是最重要的,这也是完成算法面试的前提。

算法面试优秀不意味着技术面试优秀,技术面试优秀不意味着能拿到offer,都只是一个环节。

面试不是考试并且“正确”是一个相对的概念,我们可以和HR一起探讨解决问题的方案,有效沟通。(要根据具体情况来选取最优的方法)。

 

通过过去了解你的思考行为方式:(面试前最好有准备,并且能和实际的例子结合回答

  • 项目经历:实验室项目、自己的项目、博客分享、github等等
  • 遇到的最大的挑战?
  • 犯过的错误?
  • 遇到过最难解决的bug?
  • 曾经遭遇的失败?
  • 最享受的工作方式和内容?
  • 遇到冲突的处理方式?
  • 做过最与众不同的事情?

准备好合适的问题问HR:(同样比较关键)

  • 整个小组的大概运行模式是怎样的?
  • 整个项目的后续规划是如何的?
  • 这个产品中的某个问题是如何解决的?
  • 为什么会采用某些技术?标准?
  • 我对某个技术很感兴趣,在你的组中又怎样的机会能深入这种技术?

算法面试并没有那么难:

  • 远远不需要啃完一本《算法导论》
  • 高级的数据结构在算法面试被提及的概率较低:红黑树、B-tree、斐波那契堆、计算几何、数论、FFT等
  • 远远不需要达到信息学竞赛(ACM)水平

算法面试的准备范围:

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

推荐的两个刷题学习网站:

首推肯定是leetcode了,其次推荐HackerRank(问题分类十分详细,可以深入挖掘一类问题)

 

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

1. 注意题目中的条件:有序数组(二分)、设计O(nlogn)的算法等等

2. 当没有思路的时候:简单测试用例试一试--->暴力解法同样也是方法(不要忽视)

3. 优化算法才是最难的:遍历常见的算法思路、遍历常见的数据结构、时间和空间的交换(哈希表)

4. 实际编写:注意极端条件的判断(数组为空、字符串为空)、变量名、模块化、复用性

发布了37 篇原创文章 · 获赞 92 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hesongzefairy/article/details/104375880