- 秒懂算法:用常识解读数据结构与算法
- (美)杰伊·温格罗
- 511字
- 2022-10-08 17:10:06
1.7 删除
删除指的是删去特定索引的值的过程。
下面以删除购物清单数组索引2处的值为例。在这个数组中,这个值是"cucumbers"
。
第1步:从数组中删除"cucumbers"
,如下图所示。
![](https://epubservercos.yuewen.com/BDEDD8/24438780101643106/epubprivate/OEBPS/Images/19.jpg?sign=1739683829-IN5QC4NFmsVsfdPnXOEKDoiO3TXfVGxf-0-3cc5ab75cd1e0ea179e16f31bd0f92cd)
严格意义上来说,删除"cucumbers"
只需1步。但有一个问题:数组中间有了一个空格子。中间有空格子的数组是无效的。要解决这个问题,需要把"dates"
和"elderberries"
左移。因此删除操作还需要额外步骤。
第2步:左移"dates"
,如下图所示。
![](https://epubservercos.yuewen.com/BDEDD8/24438780101643106/epubprivate/OEBPS/Images/20.jpg?sign=1739683829-MrLz1D0KNsw8bpu75F17PGjobE7kDJeF-0-3230e998d8d44522e65144473214f676)
第3步:左移"elderberries"
,如下图所示。
![](https://epubservercos.yuewen.com/BDEDD8/24438780101643106/epubprivate/OEBPS/Images/21.jpg?sign=1739683829-4vNhpRLIsb8TfoPXlFiY8uSopJXw1xGN-0-938ba71f0663c715ded1a6a597765722)
结果,这个删除操作用了3步。1步是删除元素,另外2步是移动元素来填补空格子。
和插入一样,删除元素的最坏情况是删除数组中的第一个元素。因为索引0会变成空格子,所以必须把剩余的所有元素都左移。
对有5个元素的数组来说,删除第一个元素需要1步,移动4个剩余的元素需要4步。对有500个元素的数组来说,删除第一个元素需要1步,移动剩余的元素需要499步。因此,对于有N个元素的数组,删除操作最多需要N步。
恭喜!你已经分析完第一个数据结构的时间复杂度。你已经学会了如何分析数据结构的效率,之后你会发现,不同数据结构的效率也不同。这一点很关键,因为为代码选择正确的数据结构直接决定了软件性能。
接下来要介绍集合,乍一看它和数组很相似。不过,你会发现同样的操作在数组和集合中有着不同的效率。