从数组中删除元素时的时间复杂度是多少?具体来说,使用array.pop
删除最后一个元素时的复杂性是什么?
答案 0 :(得分:2)
其O(1)
。
来源:array.c
VALUE
rb_ary_pop(VALUE ary)
{
long n;
rb_ary_modify_check(ary);
n = RARRAY_LEN(ary);
if (n == 0) return Qnil;
if (ARY_OWNS_HEAP_P(ary) &&
n * 3 < ARY_CAPA(ary) &&
ARY_CAPA(ary) > ARY_DEFAULT_SIZE)
{
ary_resize_capa(ary, n * 2);
}
--n;
ARY_SET_LEN(ary, n);
return RARRAY_AREF(ary, n);
}
如您所见,它只是递减数组的长度并返回该索引处的值。有时,pop会触发调整大小O(n)