第一次用直接排序的方式写的,提交后发现内存和时间惨目忍睹,看别人代码才知道用hash表做啊!
笨方法
#include <iostream>
#include <algorithm>
using namespace std;
int a[10005];
int b[5000000];
int main()
{
int n,m;
int i,j,k;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
cin>>a[i];
k=0;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
b[k++]=a[i]+a[j];
}
}
sort(b,b+k);
for(i=k-1;i>=k-m;i--)
{
cout<<b[i];
if(i!=k-m) cout<<' ';
}
cout<<endl;
}
return 0;
}hash表
#include <iostream>
using namespace std;
int a[5005];
int hash[10005];
int main()
{
int n,m;
int i,j,k;
while(cin>>n>>m)
{
for(i=0;i<n;i++)
cin>>a[i];
k=0;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
hash[a[i]+a[j]]++;
}
}
int count=0 ;
for(i=10004;i>=0;i--)
{
if(hash[i])
{
for(j=0;j<hash[i];j++)
{
count++;
cout<<i;
if(count==m)
break;
cout<<' ';
}
}
if(count==m) break;
}
cout<<endl;
}
return 0;
}
本文对比了使用直接排序和哈希表两种不同方法解决特定问题的效率。通过具体实例展示了如何利用C++实现这两种方法,并分析了它们在时间和空间复杂度上的表现。
313

被折叠的 条评论
为什么被折叠?



