基础算法学习--hash表
hash表的作用
- 将一个大的集合的数存进一个小的区域里
离散化是一种极其特殊的hash表
- 有开放寻址法和拉链法两种方法,开放寻址法只需要开一个数组,拉链法更接近stl但要多开一个链表
hash表模板(开放寻址法
#include<iostream>
#include<cstring>
using namespace std;
const int N = 200003; //若给的1e5,N应为二到三倍的数后的第一个质数(2e5 || 3e5 后第一个质数)
const int null = 0x3f3f3f3f; //无穷大的数,默认为空位
//hash数组
int h[N];
//查找x应该存到的位置
int find(int x){
int k = (x % N + N) % N; //保证取余结果为正
while(h[k] != null && h[k] != x){
k ++;
if(k == N) k = 0;
}
return k;
}
int main(){
//求质数的过程
// for(int i = 200000;;i ++){
// bool flag = true;
// for(int j = 2;j * j <= i;j ++){
// if(i % j == 0){
// flag = false;
// break;
// }
// }
// if(flag){
// cout << i;
// break;
// }
// }
//数组初始化
memset(h,null,sizeof h);
int n;
cin >> n;
while(n --){
char op[2];
int x;
scanf("%s%d",op,&x);
int k = find(x); //x应该在的地方
if(op[0] == 'I') h[k] = x;
else{
if(h[k] != null) cout << "Yes" << endl;
else cout << "No" << endl;
}
}
return 0;
}