假设存在未排序的数组A,并且它包含元素x(x是元素的指针),并且每个元素都有一个卫星变量k。因此,我们可以获得以下时间复杂度(对于最坏的情况):
如果我们想要搜索获取特定K,则需要花费O(n)。
如果我们想要插入元素,那么它需要花费O(1),因为A只是将元素添加到结尾。
如果我们知道x,然后从阵列A中删除怎么办?
我们必须首先搜索获取x.k并获取x的索引,然后删除 x通过其在A中的索引,对吗?
因此,对于删除,它的成本也是O(n),对吗?
感谢
答案 0 :(得分:24)
查找具有给定值的元素是线性的。
由于数组未进行排序,您可以在恒定时间内自行删除。首先将要删除的元素交换到数组的末尾,然后将数组大小减少一个元素。
答案 1 :(得分:4)
是的,没错。此外,如果它是一个数组,单独删除将花费O(n)
时间,因为删除元素后,您需要将该元素右侧的所有元素移到左侧一个位置。因此,即使您知道x(例如,您只会删除第一个元素),也需要O(n)
时间。
答案 2 :(得分:1)
排序数组中删除操作的最坏情况时间复杂度为 O(n), 如果数组未排序,则提到删除操作后 不应更改数组的顺序,那么时间复杂度将与 O(n) 否则为 O(1)。
答案 3 :(得分:0)
是。查找要删除的元素需要O(n)
次。然后,为了删除它,您必须将所有元素向左移动一个空格。这也是O(n)
,因此总复杂度是线性的。
另外,如果您正在讨论静态分配的数组,那么insert也需要O(n)
。您必须调整数组的大小才能容纳额外的元素。有一些方法可以将此运行时间分摊到O(1)
。