hash 查找

当查找的范围很大(例如n=100000),同时查找的关键数往往不止一个时(m)

若一个个的比较,则时间复杂度达到n*m,导致程序的运行时间大于题目要求的时间。

此时 若题目给出的空间很大时,可以尝试以空间换取时间,采用hash查找。

例子:

#include <iostream>
#include <vector>;
using namespace std;

int main()
{
 int N;
 cin>>N;
 int i,j;
 int *Score=new int[N];
 for(i=0;i<N;i++)
 {
  cin>>Score[i];
 }
 //利用空间换取时间,用hash 表来存储
 int *all=new int[100000];
 for(i=0;i<100000;i++)
 {
  all[i]=0;
 }
 for(i=0;i<N;i++)
 {
  all[Score[i]]++;
 }
 
 int K;
 cin>>K;
 int *Search=new int[K];
 for(i=0;i<K;i++)
 {
  cin>>Search[i];
 }
 for(i=0;i<K-1;i++)
 {
  cout<<all[Search[i]]<<" ";
 }
 cout<<all[Search[K-1]];
 return 0;
}

猜你喜欢

转载自www.cnblogs.com/houchen/p/9146149.html