对于数组动态扩容,当在数组尾部插入元素时只需要O(1)的时间复杂度,但是当插入元素刚好达到扩容的边界时,这时需要申请一块新的内存尺寸为原来的两倍,并将原数组的元素复制到新数组中,看起来数组的追加元素的效率并不高,但是因为是两倍扩容,假设数组的初始容量为2,对于N次的追加操作来说,需要扩容的次数为logN次
所以扩容的总共复制操作为 logN
∑ 2^i
i = 2
这个求和公式为等比数列,既 a1=2,q=2,Sn=2(1-2^logN)/(1-2)=2(2^logN-1)=2^(logN+1)-2
忽略乘2和减2, 渐进为2^logN,所以渐进复杂度为O(N),分摊到N次的插入操作中,时间复杂度为O(1)。