静态数组删除最后一个元素的时间复杂度:O(n)还是O(1)?
静态数组删除最后一个元素的时间复杂度分析
首先得明确:静态数组是编译阶段就固定了内存大小的内存块,物理上的内存空间一旦分配就没法改变——所谓的“数组大小变化”,都是逻辑层面的操作。
针对你的问题,分两种情况说:
- 如果只是要“删除最后一个元素”(让它不再被当作有效元素),完全不需要动物理内存,只需要维护一个记录有效元素个数的变量(比如叫
size),把这个变量减1就行。这个操作是纯数值修改,时间复杂度是O(1)。你说的“标记最后元素为空”本质就是这个逻辑——不用真的清空内存,只要让程序知道“这个位置之后的元素不算数”就行,这个思路完全正确,也是实际开发里处理静态数组的常规操作。 - 要是有人硬要“物理上缩小数组”——比如重新申请一块更小的内存,把原数组除了最后一个元素的所有内容复制过去,那这个操作的时间复杂度就是O(n),因为要复制n-1个元素。但这种做法毫无意义,静态数组的内存本来就是固定分配的,浪费这点空间远不如用逻辑长度管理高效,实际没人这么干。
总结一下:静态数组删除最后一个元素的时间复杂度可以做到O(1),你的思路完全没问题,核心就是用逻辑有效长度代替物理数组的大小,没必要去折腾内存复制。
内容的提问来源于stack exchange,提问作者Vijay Babu
相关产品推荐
相关产品推荐

