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

时间:2013-10-17 17:47:02

标签: c++ arrays data-structures

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

3 个答案:

答案 0 :(得分:2)

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

您必须遍历元素以降低其值。如果不在O(n)时间内迭代它们,它们就无法访问每个值。

话虽如此,如果你正在减少数组中的每个值,那么你可以使用一个惰性方法并将decease数量存储在一个单独的变量中然后当用户想要看到一个元素的值时简单地减少它由存储的数量组成。

答案 1 :(得分:1)

我想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 )

答案 2 :(得分:0)

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

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