关于课程2-9 均摊复杂度和防止复杂度的震荡13min20s处的分析问题。

来源:2-9 均摊复杂度和防止复杂度的震荡

慕容2892559

2020-05-25

分析说可能出现data.length=1的情况,emmm,我想问一下是怎么出现data.length=1这种情况呢?
我自己是这么理解的:
如果想出现data.length=1的情况,说明之前是data.length=2进行了一次缩容。
而data.length=2要进行缩容,要满足size=0,所以应该是data中有1个元素,然后进行了remove。
此时data的情况是size=0,length=1,但是此时进行remove会满足if中的判断条件抛出一个异常,所以并不会进行缩容操作。。。
可能我理解的有偏差吧,刚开始学这个东西,理解的很慢。。。还请老师指点。

写回答

1回答

liuyubobobo

2020-05-26

比如,用户初始创建动态数组的时候,capacity 传的就是 1。

可以参考这里的讨论:

http://coding.imooc.com/learn/questiondetail/57001.html


另外,确实可以将整个动态数组实现成为,缩容不可能少于某一个阈值,比如 10 的动态数组。感兴趣可以试试看?


但不管怎样,在这里,你也可以理解成是一个防御型编程。毕竟,下面我们要调用的 resize(x) 中,我们不希望 x 为 0,所以防御性地判断一下 x 不能为 0,其实是没有问题的:)


继续加油!:)

0
1
慕容2892559
非常感谢!
2020-05-26
共1条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程