数学面试技巧指南
数学是计算机科学的基础,每个程序员和计算机科学家都需要具备基本的数学知识。幸运的是,在编码面试中通常不会涉及太多数学知识,但了解一些基本的数学技巧在某些情况下是有帮助的,因为你可能需要实现数学运算。
面试时需要注意的事项
- 如果代码涉及除法或模运算,请记住检查除以0的情况。
- 如果你在使用像Java和C++这样的语言,请注意处理溢出/下溢出。至少要提到溢出/下溢出是可能的,并询问是否需要处理它。
- 考虑负数和浮点数。这可能看起来很明显,但在面试压力下,许多明显的案例会被忽略。
边缘情况
- 除以0
- 乘以1
- 负数
- 浮点数
常用公式
公式 | |
---|---|
检查一个数是否为偶数 | num % 2 == 0 |
从1加到N的和 | 1 + 2 + ... + (N - 1) + N = (N+1) * N/2 |
等比数列的和 | 2^0 + 2^1 + 2^2 + 2^3 + ... 2^n = 2^(n+1) - 1 |
N个数的排列 | N!/(N-K)! |
N个数的组合 | N!/(K!*(N-K)!) |
技巧
数的倍数
当问题涉及到“一个数是否是X的倍数”时,模运算符会很有用。
比较浮点数
处理浮点数时,要注意舍入错误。考虑使用epsilon比较而不是相等性检查。例如,abs(x - y) <= 1e-6
而不是x == y
。
快速运算符
如果问题要求你实现一个如乘方、开方或除法这样的运算符,并且希望它的速度比O(n)快,通常的做法是采用某种翻倍(快速乘方)或减半(二分查找)。示例:Pow(x, n),Sqrt(x)。
基本问题
如果你正在为这个主题学习,这是需要练习的基本问题。
推荐练习题
在你已经为这个主题学习和练习了基本问题之后,这是推荐的练习题。
推荐课程
import AlgorithmCourses from '../_courses/AlgorithmCourses.md'