分享一个代码量少又很经典的算法,太实用了!

那必须祭出FB高级架构师爆肝3个月、增删16次的面试常考算法模板cheatsheetV4.1。

看前防杠:

本文仅对面试中的常考算法知识点给出通用解题思路和模板,代码量不算少,案例也算不上牛逼,但绝对经典,绝对通用!

本文作者:令狐冲,Facebook高级架构师,前算法竞赛中国国家集训队员,ACM金牌选手,面试常考算法模板献上:

学二分,让你不再精分

先给三道例题,试试能不能用二分法顺利解出答案。

⼆分查找(在排序的数据集上进行二分)

[在排序数组中找最接近的K个数]http://%29https//www.lintcode.com/problem/find-k-closest-elements/?utm_source=sc-csdn-ly0616)(在未排序的数据集上进行二分)

书籍复印(在答案集上进行二分)

如果没思路的话,接着往下看。

如果你是Java程序员,看这里

强调几个要点

①start+1<end

②start+(end-start)/2

③=,<,>分开讨论,mid不+1也不-1

④循环结束后,单独处理start和end

Python解法也为你整理好了,我是不是雨露均沾

有人会说:模板背再多又如何,关键是不会用啊!

别慌,二分法的使用条件和时间复杂度在这里。

使用条件

  • 排序数组(30-40%是二分)

  • 当面试官要求你找一个比O(n)更小的时间复杂度算法的时候(99%)

  • 找到数组中的一个分割位置,使得左半部分满足某个条件,右半部分不满足(100%)

  • 找到一个最大/最小的值使得某个条件被满足(90%)

时间复杂度

时间复杂度:O(logn)

空间复杂度:O(1)

面试常考算法模板cheatsheet的用法

这是其中一个案例,在举一反三之前,我们来看看这套cheatsheet的用法:

面试前:

①先看例题,看自己是否能自行用相应的数据结构和算法解题。

②根据模板,解题。如有必要背诵模板。

③通过在LintCode上刷题,巩固其使用条件和时间复杂度

面试中:

①通过使用条件判断这道题用哪种解法

②套模板解题

当然,像是双指针、排序算法、二叉树、宽度优先搜索、深度优先搜索的使用条件、时间复杂度、代码模板,我也都整理好了。

关于算法面试,我还有想说的……

首先,看到这个问题的时候我愣了一下:代码量很少=牛逼吗?

我在Facebook当面试官时遇到过很多求职者,各个国籍都有。很多人觉得代码越短越好,实际上我认为通过适当的子函数化的代码包装,多加空行,虽然代码更长了,但是能够让你的代码:易读,易维护,不易错

话又说回来,面试中追求的绝不仅仅是完美无瑕的代码,被录取的人也不全是ACM比赛前1%的大佬,面试官想要的一定是适合做partner,各方面能力都“刚刚好”的求职者。

这是我在《九章算法班》里反复强调的:

面试算法≠算法

现在我的春招公益讲座《FB面试官揭秘算法面试速成技巧 - 怎样做到 Bug Free 和刷100题等于别人刷300题》已经上线,感兴趣的小伙伴不妨一起来交流学习下~

所以,世界上哪有什么牛不牛逼呢?无非是有些人把某件事做到了极致,无非是有些人把某件事做到了“刚刚好”。

最后,奉上我整理的面试常考数据结构和算法的高频题,请安心食用~

深度优先搜索:

子集

图是否是树

因式分解

子数组之和

K数和

电话号码的字母组合

二叉树:

寻找重复的子树 二叉树的后序遍历

找出树中每行的最大值

二叉树的所有路径

对称树

宽度优先搜索:

安排课程

岛屿的个数

拓扑排序

最大子数组差

序列重构

贪心:

会议室

最大乘积

最大子数组差

俄罗斯套娃信封

加油站

二分法:

经典二分查找问题

寻找峰值

最长上升子序列

搜索旋转排序数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值