【发布时间】:2019-10-19 16:19:32
【问题描述】:
我在 InterviewBit 上解决一个问题并遇到一个问题, 这是链接https://www.interviewbit.com/problems/diffk-ii/。 当我使用 c++ STL map 来解决这个问题时,它会向我显示消息
超出内存限制。您的提交未在分配的内存限制内完成。 这是我的代码
int Solution::diffPossible(const vector<int> &A, int B) {
int n = A.size();
map< int , int > mp;
for(int i =0;i<n; i++)
mp[A[i]] = i;
int k = B;
for(int i =0; i<n; i++){
if(mp.find(A[i]+k) != mp.end() && mp[A[i]+k] != i){
return 1;
}
if(mp.find(A[i]-k) != mp.end() && mp[A[i]-k] != i){
return 1;
}
}
return 0;
}
当我用 unorderd_map 替换 map 时,解决方案被接受。 这是代码
int Solution::diffPossible(const vector<int> &A, int B) {
int n = A.size();
unordered_map< int , int > mp;
for(int i =0;i<n; i++)
mp[A[i]] = i;
int k = B;
for(int i =0; i<n; i++){
if(mp.find(A[i]+k) != mp.end() && mp[A[i]+k] != i){
return 1;
}
if(mp.find(A[i]-k) != mp.end() && mp[A[i]-k] != i){
return 1;
}
}
return 0;
}
这意味着 map 比 unordered_map 占用更多的内存。 谁能解释这是怎么回事?为什么地图占用更多内存 空间大于 unordered_map?
【问题讨论】:
-
这是一个很难很好回答的问题,所以我要退缩了。本质上,容器的 payload 的大小与系统上的指针相比。这意味着哈希映射将占用相对较少的空间。我喜欢你巧妙地解决这个问题!但请注意,您可以在 O(N) 内解决此问题,而无需重新存储输入数组。
-
我已链接的副本中接受的答案直接回答了这个问题。
-
对于小内存,很难击败
flat_set、flat_map(例如在 boost 中可用,显然在标准化过程中),即排序向量。map和unordered_map应该有类似的内存要求,我认为这是幸运的,在你的特定实现中刚好低于阈值。 -
@Bathsheba 你如何达到 O(N)?您有不涉及某种排序算法的解决方案吗?
标签: c++ dictionary stl