我可以在恒定时间内从数组的所有元素中减去一个整数值吗?
例如:
给定数组:1 2 3 4
预期数组:0 1 2 3
我希望这个结果具有O(1)时间复杂度。这可能吗?
如果是,我怎样才能达到同样目的?
P.S.:表达式a [100] = {0};在不使用for循环的情况下将数组的所有单元格初始化为零。我正在寻找类似的表达式
答案 0 :(得分:2)
您不能在O(n)时间内更改内存中的n个元素,但您可以更改该内存所代表的内容。如果要创建自定义数组类,则可以包含偏移成员。读取数组元素时,可根据需要添加偏移量。添加元素时,在将其存储在内存中之前减去当前偏移量(因此在添加偏移量时将其调用为正确的值)。使用该布局只需在O(1)时间内修改偏移量,即可有效地实现您的目标。
答案 1 :(得分:0)
没有。您需要遍历每个元素并减去一个元素。遍历每个元素意味着o(n)或线性时间。常量暗示您只需要经历一个元素。
a [100] = {0}是句法糖,看起来是不变的,但它在后端实际上是线性的。见this answer