开篇先引入一位面试官的对于面试者的要求:
前美团资深工程师 Windy:
作为面试官,我比较看中候选人的行业背景、专业技能还有一些软素质。具体来说:
-
行业背景就是上一份工作所在的领域比如电商、社交等;
-
专业技能的话主要是语言基础,高并发、分布式、中间件等知识,以及排查问题、运维、设计的能力。这里面最重要的是编程能力,针对高级岗位还要考察架构能力。
-
软素质包括候选人的沟通能力、项目管理能力和领导力等。
作为面试官,在面试过程我会用笔试题的形式考察候选人的思维逻辑能力,通常考察的具体知识点包括链表、树、排序、二分查找等,需要候选人能够分析出不同算法的时间复杂度和空间复杂度。题目我会选择 LeetCode 上简单到中等难度的题目,常考的有:
-
单链表翻转(递归或者循环)
-
树的前中后序遍历
-
动态规划(爬楼梯以及变形问题、斐波那契数列、股票问题)
-
二分查找(以及变形)
-
排序(快排)
通过算法面试题的考察,我希望候选人不光可以展示编程能力,还可以通过详细了解题目,展示自己的沟通能力和推演能力(如何构建题目的思路)。最关键的编程能力,候选人可以展示自己对于问题边界的思考,比较不同方法的性能和效率,给出解决问题的多种方法。
我的精选算法面试题是:搜索二维矩阵
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
输出: true
示例 2:
输入:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
输出: false
看完上面的内容,我想大家对于算法的重要性也有了一个大概的了解,为了帮助大家提高自己的算法能力,为大家搜罗整理到了几份非常nice的算法笔记:
限于文章篇幅原因,只能以截图的形式展示出来,有需要的小伙伴可以文末获取↓↓↓
第一份 排序和数据结构学习笔记
这份笔记内容全部都是纯手打,排序算法/数据结构的代码可能不是最优解,代码的实现都是以比较容易理解的方式去写的。几乎每句代码都有对应的注释,应该是能看懂的。
目录概览
内容简述
一、冒泡排序
二、选择排序
三、插入排序
四、快速排序
五、归并排序
六、希尔排序
七、堆排序
八、基数排序(桶排序)
九、递归
十、链表
十一、栈
十二、队列
十三、二叉树
第二份 LeetCode算法小抄
专业刷题笔记……
动态规划专题
LeetCode:695. 岛屿的最大面积
LeetCode:474. 一和零
LeetCode:1314. 矩阵区域和
LeetCode:714. 买卖股票的最佳时机含手续费
LeetCode:1130. 叶值的最小代价生成树
双指针专题
LeetCode:11. 盛最多水的容器
LeetCode:287. 寻找重复数
二分查找专题
LeetCode:378. 有序矩阵中第K小的元素
LeetCode:1337. 方阵中战斗力最弱的 K 行
贪心算法专题
链表专题
广度优先搜索专题
深度优先搜索专题
……
LeetCode:513. 找树左下角的值
LeetCode:129. 求根到叶子节点数字之和
第三份 程序员代码面试指南
左神写的《程序员代码面试指南,IT名企算法与数据结构题目最优解》
书籍涉及算法与数据结构编程题目240道以上,并且个人实现出最优解,大部分题目为面试高频。
目录(算法分为将、校、尉、士四个等级来表示难易程度)
第1章栈和队列
设计一个有getMin功能的栈(士★)
由两个栈组成的队列(尉★★)
如何仅用递归函数和栈操作逆序一个栈(尉★★)
猫狗队列(士★)
用一个栈实现另一个栈的排序(士★)
用栈来求解汉诺塔问题(校★★★)
生成窗口最大值数组(尉★★)
构造数组的MaxTree (校★★★)
求最大子矩阵的大小(校★★★)
最大值减去最小值小于或等于num的子数组数量(校★★★)
限于文章篇幅原因,就展示到这里了,有需要的小伙伴可以查看下方名片↓↓↓