如何在恒定时间内减少数组的内容

How to decrease contents of array in constant time?

本文关键字:数组 定时间      更新时间:2023-10-16

在学习C++数据结构时,我在想是否可以在恒定时间内将整数数组的内容减少一个整数。如果我有足够的内存,我该怎么做?

如果我理解正确,没有一个例子真的很难。

您必须迭代元素以降低其值。它们无法在不 O(n) 时间内迭代它们的情况下访问每个值。

话虽如此,如果您将数组中的每个值都减少相同的值,那么您可以使用惰性方法并将死亡量存储在单独的变量中,然后当用户想要查看元素的值时,只需将其减少存储量。

>我想std::vector::resize就是你要找的。假设您有一个包含 10 个元素的向量,并且您想将此大小减小 6 以仅包含 4 个元素,那么您可以执行以下操作:

int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
std::vector<int> v(a, a + 10);
// v contains 10 elements here
v.resize(v.size() - 6);
// v contains 4 elements here

如果发生重新分配(当必须获得更大的内存块时),则复杂度为 O(n),但如果向量只是缩小,它应该是 O(1)

您希望从数组的每个元素中减去一个值 m。

为了实现这一点,您显然需要访问数组中的每个元素。这意味着O(n)是这项任务复杂性的下限。它不能在恒定的时间内完成。