拿下技术面上传简历

有一段递归函数 f(arr, l, r):若 r - l <= 1 直接返回;否则先用一个 O(n log n) 的排序把 arr[l..r] 这一段排好(n = r - l),然后令 m = (l+r)/2,递归调用 f(arr, l, m) 和 f(arr, m, r)。请回答:(1) 写出它的递归式,并求出 n = 2^k 时的时间复杂度;(2) 如果每次递归调用都新建一个长度为 n 的数组、把子区间拷进去并在新数组上排序,空间复杂度是多少?

数据结构与算法复杂度分析3-5 年知识点 1 个

面试官在考什么

能否正确使用主定理处理 f(n) 中带 log 因子的情况,以及能否区分「总分配量」和「同时存活峰值」两种空间口径。

递归复杂度

回答框架 · 前两步

  1. 递归式为 T(n) = 2T(n/2) + Θ(n log n),a = 2、b = 2,基准是 n^(log_2 2) = n,而 f(n) = n log n = Θ(n^1 · log^1 n),属于主定理扩展第二类 k = 1 的情形,所以 T(n) = Θ(n log² n)。
  2. 不能直接套归并排序的结论答成 O(n log n):多出来的那层 log 来自「每层自身的代价里本来就带一个 log」。

还有 3 条答案要点、 3 层追问、 4 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题