秒懂算法:用常识解读数据结构与算法
上QQ阅读APP看书,第一时间看更新

1.7 删除

删除指的是删去特定索引的值的过程。

下面以删除购物清单数组索引2处的值为例。在这个数组中,这个值是"cucumbers"

第1步:从数组中删除"cucumbers",如下图所示。

严格意义上来说,删除"cucumbers"只需1步。但有一个问题:数组中间有了一个空格子。中间有空格子的数组是无效的。要解决这个问题,需要把"dates""elderberries"左移。因此删除操作还需要额外步骤。

第2步:左移"dates",如下图所示。

第3步:左移"elderberries",如下图所示。

结果,这个删除操作用了3步。1步是删除元素,另外2步是移动元素来填补空格子。

和插入一样,删除元素的最坏情况是删除数组中的第一个元素。因为索引0会变成空格子,所以必须把剩余的所有元素都左移。

对有5个元素的数组来说,删除第一个元素需要1步,移动4个剩余的元素需要4步。对有500个元素的数组来说,删除第一个元素需要1步,移动剩余的元素需要499步。因此,对于有N个元素的数组,删除操作最多需要N步。

恭喜!你已经分析完第一个数据结构的时间复杂度。你已经学会了如何分析数据结构的效率,之后你会发现,不同数据结构的效率也不同。这一点很关键,因为为代码选择正确的数据结构直接决定了软件性能。

接下来要介绍集合,乍一看它和数组很相似。不过,你会发现同样的操作在数组和集合中有着不同的效率。