分析动态数组的时间复杂度

数组按照操作分为增删改查

    addLast(e):添加的元素是在数组尾部操作,不需要移动其他元素位置,直接添加即可。时间复杂度为O(1)

    addFirst(e):添加的元素是在头部操作,插入时其他元素要依次往后挪。时间复杂度为O(n)

   add(index,e):根据索引添加元素,我们并不知道索引具体会插入在哪个位置。根据概率论分析,时间复杂度O(n/2) = O(n)

   除此之外我们还要考虑resize,当数组进行扩容时,时间复杂度同样为O(n)

   removeLast(e):同增加操作一样,时间复杂度为O(1)

   removeFirst(e):同增加操作一样,时间复杂度为O(n)

   remove(index,e):同增加操作一样,时间复杂度O(n/2) = O(n)

   一样也要考虑到扩容,时间复杂度为O(n)

  set(index,e):根据索引修改元素。当知道索引时,可以直接修改元素而不需要对其他元素进行操作。故时间复杂度O(1)

  get(index):通过索引查询元素,直接查找。时间复杂度O(1)

  contains(e):查看数组中是否包含该元素。由于不是通过索引查找,我们需要遍历数组,增加了时间量。时间复杂度O(n)

  find(e):查看数组中对应的索引是多少。同contains一样需要遍历数组。时间复杂度O(n)

综上所述,考虑到最坏的情况,数组的时间复杂度应为O(n)。如果只考虑尾部增删或者getIndex的话,是O(1)

如有不对的地方,欢迎各位大佬指正。后续如果有新的东西会更新!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值