在恒定时间内从数组的所有元素中减去一个数字

时间:2016-11-11 02:52:18

标签: arrays time-complexity

我可以在恒定时间内从数组的所有元素中减去一个整数值吗? 例如:
给定数组:1 2 3 4

预期数组:0 1 2 3
我希望这个结果具有O(1)时间复杂度。这可能吗?
如果是,我怎样才能达到同样目的?


P.S.:表达式a [100] = {0};在不使用for循环的情况下将数组的所有单元格初始化为零。我正在寻找类似的表达式

2 个答案:

答案 0 :(得分:2)

您不能在O(n)时间内更改内存中的n个元素,但您可以更改该内存所代表的内容。如果要创建自定义数组类,则可以包含偏移成员。读取数组元素时,可根据需要添加偏移量。添加元素时,在将其存储在内存中之前减去当前偏移量(因此在添加偏移量时将其调用为正确的值)。使用该布局只需在O(1)时间内修改偏移量,即可有效地实现您的目标。

答案 1 :(得分:0)

没有。您需要遍历每个元素并减去一个元素。遍历每个元素意味着o(n)或线性时间。常量暗示您只需要经历一个元素。

a [100] = {0}是句法糖,看起来是不变的,但它在后端实际上是线性的。见this answer

相关问题