拿下技术面上传简历

实现一个动态数组:初始容量为 1,当已存元素个数超过当前容量时,申请一个容量翻倍的新数组,把旧元素逐个拷贝过去,然后放入新元素。现在连续执行 n 次 push_back(n 是 2 的幂)。请回答:(1) 这 n 次操作一共发生多少次元素拷贝?(2) 单次 push_back 的最坏代价是多少?(3) 均摊到每次操作的代价是多少,为什么?

数据结构与算法复杂度分析校招知识点 1 个

面试官在考什么

是否理解均摊分析是对一个操作序列求和再除以次数,而不是概率意义下的平均;以及能否区分“单次最坏 O(n)”和“均摊 O(1)”。

均摊分析

回答框架 · 前两步

  1. 扩容发生在容量 1→2→4→…→n 时,总拷贝次数是 1+2+4+…+n/2 = n−1,小于 n,而不是每次扩容都拷贝 n 个。
  2. 单次 push_back 的最坏代价是触发扩容的那一次,O(n)。

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

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

延伸阅读

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

同一能力域的其他题