【发布时间】:2011-01-20 12:59:16
【问题描述】:
假设我们已经阅读了这些值:
3
1241
124515
5322353
341
43262267234
1241
1241
3213131
我有一个这样的数组(包含上面的元素):
a[0]=1241
a[1]=124515
a[2]=43262267234
a[3]=3
...
问题是数组中元素的顺序不是恒定的(我必须在程序的其他地方更改它)。
我如何知道一个元素出现在读取文档中的哪个位置。
请注意,我不能这样做:
vector <int> a[1000000000000];
a[number].push_back(all_positions);
因为 a 太大(存在内存限制)。 (假设我只有 3000 个元素,但它们的值是从 0 到 2^32)
因此,在上面的示例中,我想知道 1241 出现的所有位置,而无需再次遍历所有读取的元素。
换句话说,我如何将位置“1,6,7”与数字“1241”相关联,以便我可以在 O(1) 中简单地访问它们(其中 1 实际上是元素出现的位置数)
如果没有 O(1) 我想知道什么是最优的... 不知道我有没有说清楚。如果没有,请说出来,我会更新我的问题:)
【问题讨论】:
-
a 是我保存元素的数组的名称
-
vector<int>不会比原始数组大。如果值很高,它的内存占用不会增加。 -
int a[1000000000000] 已经是我可以“负担”的更多了。 vecotr
a[1000000000000] 不是已经在使用 4*1000000000000 字节了吗? -
我认为你误解了asymptotic analysis:“O(1)(其中 1 实际上是元素出现的位置数)”。
-
我的意思是,如果只有 1 个位置,它就是 1。如果有 N 个位置,则为 N。