![[//]: # (推荐题解模板,请替换blablabla等内容 ^^)
图
题目描述
图放不上来,总之可以把这么多这么混乱的几个数组,h[],e[],ne[],idx理解成哈希坑位,每次存入的数,用ne指向下一个,idx是e的存入下标,按顺序累加
拉链插入我们采用链表头插法,把h数组的坑为指向输入的数,把输入的数指向原来的坑位也就是拉链头节点
样例
blablabla
算法1
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
blablabla
算法2
(暴力枚举) $O(n^2)$
blablabla
时间复杂度
参考文献
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 3; //哈希表为了散列在较为分开的位置,需要找到一个质数
int h[N], e[N], ne[N], idx; //h是每个头的位置下标,e拉链下标,ne为拉链的指针, idx是累加的
void insert(int x)
{
int k = (x % N + N) % N;
e[idx] = x;
ne[idx] = h[k];
h[k] = idx ++;
}
bool find(int x)
{
int k = (x % N + N) % N;
for(int i = h[k]; i != -1; i = ne[i]){
if(e[i] == x){
return true;
}
}
return false;
}
int n;
int main()
{
cin >> n;
memset(h, -1, sizeof h);
while(n--){
string op;
int x;
cin >> op >> x;
if(op == "I"){
insert(x);
}
else{
if(find(x)) puts("Yes");
else puts("No");
}
}
return 0;
}
](https://)