关注“极客时间”微信公众号,在后台回复“算法试看”,即可获取试看课程的 PDF 课件。
完整的 PDF 课件地址,购买课程后在非试看章节(第七节课开始)下面可获取下载链接。
作者回复: 你这样理解是对的,也正是因为这样,在平时项目里我们很难会实际使用链表。但是有一种情况,比如区块链或者比特币,我们很少随机访问中间位置的节点,而绝大部分时候我们就在尾部叠加新节点。
作者回复: Good
作者回复: 对的,查找的话,如果无序数组就是o(n),如果有序就可以用二分查找 O(logn)
作者回复: infoq的工作人员辛苦画的,用专门的作图工具
作者回复: 一般情况下,的确如你所说。要赋值多个变量的时间肯定要比单纯traverse链表要慢。
作者回复: 完全无序的数组的话,只能一个个找过去。
作者回复: 支持,很支持的!
作者回复: 数组的大部分操作的确是o(1)的,但是删除和在任意位置插入不是,因为数组为了保持所有元素连续,需要后续的元素都挪动位置。比较重的操作。
作者回复: 对的。 append: 在尾部插入新元素, prepend: 在头部插入新元素
作者回复: 具体看它的数组结构是如何实现的,同时看插入的位置:一般在空或者尾插入(即使要扩容),高级语言里的数组结构经过优化,可能是o(1)的时间。不过整体插入的复杂度还是o(n)