从数组中删除元素的复杂性是什么?

时间:2016-02-29 14:25:27

标签: arrays ruby time-complexity

从数组中删除元素时的时间复杂度是多少?具体来说,使用array.pop删除最后一个元素时的复杂性是什么?

1 个答案:

答案 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)