简单的动态数组也有小坑哦

动态数组

  • 无限相同类型 的元素组成的集合叫动态数据。相较于数组动态数组的容量是动态的,不用在创建时声明需要开辟多大的内存空间
实现原理
  • 动态数组通过扩容和缩容来实现自动分配数组容量的操作。
  1. 扩容: 当开辟的数组容量满并且还要插入元素的时候,就开辟一个容量为原来数组两倍(这里两倍是大多数语言都采用的数值,并不一定必须两倍)的新数组并将旧数组的数据移动至新数组
    这种操作被称之为数组的扩容
  2. 缩容:当取出元素之后数组中的元素占据不足当前容量的一半时, 会开辟一个为当前数组容量一半的新数组并将原数组元素移动至新数组中。此过程称之为数组的缩容
复杂度分析
  • 假设 n为当前动态数组内存储的元素个数
  • 严格来说,当触发扩容缩容操作的时候复杂度为 O(n), 未触发时为 O(1)。
    但在正常使用过程中扩容缩容操作出现的概率很小,所以这里引入均摊复杂度的概念。
    也就是说我们近似的认为动态数组的时间复杂度是O(1)
注意事项
  1. 复杂度震荡
    可能会有如下情况: 当一个动态数组在插入第5个元素时会触发扩容
    然后插入第5个元素触发扩容、取出第5个元素又触发缩容
    如此反复那动态数组的时间复杂度就会退化为O(n),这种情况就叫复杂度震荡
    那么如何解决复杂度震荡的问题?很简单,只要不那么频繁的触发缩容就好了。
    做法就是当元素数量不足原来1/4的时候再触发缩容到原来容量一半的操作,这样就破坏了反复扩容缩容的条件。
实现
  1. Python
  2. java
算法应用
  1. 简单 两数和
  1. 中等 合并区间 题解
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值