如何在恒定时间内减少数组的内容
How to decrease contents of array in constant time?
在学习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)是这项任务复杂性的下限。它不能在恒定的时间内完成。
相关文章:
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- C++常量数组的编译时间较长
- 将字符数组转换为时间结构
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- Python C 绑定 - 获取从 python 到 C++ 的数组
- 将数组的元素插入映射的时间复杂度是多少?
- 如果你有一个固定大小的数组,你需要遍历它!n次,使用二进制搜索如何改变时间复杂性
- 在给定程序中降低矢量数组实现堆栈的时间复杂度有哪些不同的可能方法?
- 如何检查 2 个 c++ 数组在 O(1) 或 O(log n) 时间复杂度中是否相同(所有元素都相同,顺序很重要)?
- 测量我的随机数数组打印的时间始终显示为 0 秒
- 未知大小的数组作为类成员,用于在运行时(对象创建时间)创建数组的对象
- 函数参数绑定通过参考与传递指针传递数组的规则
- 使用不同的整数组装字符数组以类似于日期和时间
- 删除动态数组后,其绑定的某些值不会更改.为什么
- 来自不同位置的数组输出的执行时间
- 以C++声明数组的时间复杂度
- 如何在数组中使用结构化绑定作为ARG传递给某些函数
- 遍历二维数组的时间复杂度是多少
- Std::数组编译时间扣除
- c++:填充数组的时间太长