使用STL中的int数组或unordered_map在内存和时间复杂性哈希方面哪个更有效?
散列是指存储由键值和映射值的组合形成的元素,并根据其键快速检索各个元素。
实际上,我正在尝试解决this问题。
这是我的解决方案:-
#include <bits/stdc++.h>
#define MAX 15000005
using namespace std;
/*
* author: vivekcrux
*/
int gcd(int a, int b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
int c[MAX];
int n;
int sieve()
{
bitset<MAX> m;
m.set();
int ans = 0;
for(int i=2;i<MAX;i++)
{
if(m[i])
{
int mans = 0;
for(int j=i;j<MAX;j+=i)
{
m[j]=0;
mans += c[j];
}
if(mans<n)
ans = max(ans,mans);
}
}
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int i,j;
cin>>n;
int a[n+1];
for(i=0;i<n;i++)
{
cin>>a[i];
}
int g = a[0];
for(i=1;i<n;i++)
{
g = gcd(g,a[i]);
}
for(i=0;i<n;i++)
{
a[i] /= g;
if(a[i]!=1) c[a[i]]++;
}
int m = sieve();
if(m==0)
cout<<"-1";
else
cout<<n - m<<endl;
return 0;
}
在此代码中,如果我使用
unordered_map<int,int> c;
代替
int c[MAX];
我得到了超出内存限制的结论。我发现here的unordered_map平均具有恒定的平均时间复杂度,但是这里没有提及有关空间复杂度的详细信息。我想知道为什么我要获得unordered_map的MLE。