首页 > 其他分享 >2022-11-18 Acwing每日一题

2022-11-18 Acwing每日一题

时间:2022-11-18 01:01:36浏览次数:68  
标签:11 输出 include return 2022 int 18 哈希 null

本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的。同时也希望文章能够让你有所收获,与君共勉!

今晚太晚了,就少些一点算了。

模拟散列表

维护一个集合,支持如下几种操作:

I x,插入一个数 x;
Q x,询问数 x 是否在集合中出现过;
现在要进行 N 次操作,对于每个询问操作输出对应的结果。

输入格式
第一行包含整数 N,表示操作数量。

接下来 N 行,每行包含一个操作指令,操作指令为 I xQ x中的一种。

输出格式
对于每个询问指令 Q x,输出一个询问结果,如果 x 在集合中出现过,则输出 Yes,否则输出 No。

每个结果占一行。

数据范围
1≤N≤105
−109≤x≤109
输入样例:

5
I 1
I 2
I 3
Q 2
Q 5

输出样例:

Yes
No

算法原理

简单的讲一下哈希表是用来干什么的吧。哈希表主要是用来记录一个数它出现的次数,能够以较快的时间在集合中找到它,那么为什么会这样呢,主要是因为哈希表建立了一种映射关系将值给映射到某一段较小的区间内,每一个值都对应的一个键,这个键就能帮助我们在这个区间里较快的找对存储的值,但是有一个问题就是这样的映射关系很容易重复,即容易产生哈希冲突,而解决哈希冲突的办法有很多,这里主要介绍开放寻址和拉链法。
先来看开放寻址法怎么实现。主要思路就是给定一个数x,通过加一个特别大的数再取余数转换成对应的键(x%N+N)%N,在哈希表中找没人(数字)占的地方插入就行,如果这个地方被人插入过,那么就需要寻找没有被插入过的地方,具体代码实现如下。

int find(int x){
	int t = (x%N+N)%N;
	while(h[t]!=null  && h[t] != x){
		t ++ ;
		if(t == N) t = 0;
	}
	return t;
}

拉链法明天再讲吧。

代码实现

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 200003,null = 0x3f3f3f3f;
int h[N];   // 厕所哦
int n;

int find(int x){
    int t = (x%N+N)%N;
    while(h[t]!=null && h[t]!=x){
        t++;
        if(t == N) t = 0;
    }
    return t;   // 如果存在返回x的厕所编号,不存在就返回要上厕所的编号
}

int main()
{
    cin >> n;
    memset(h,0x3f,sizeof h);
    while(n--){
        char op[2];
        int x;
        scanf("%s%d",op,&x);
        int t = find(x);
        if(*op == 'I'){
            h[t] = x;
        }
        else{
            if(h[t] != null){
                puts("Yes");
            }
            else{
                puts("No");
            }
        }
    }
    return 0;
}

标签:11,输出,include,return,2022,int,18,哈希,null
From: https://www.cnblogs.com/WangChe/p/16901920.html

相关文章

  • LeetCode刷题记录.Day18
    实现strStr28.找出字符串中第一个匹配项的下标-力扣(LeetCode)classSolution{public://構造next前綴表voidgetNext(int*next,conststring&s){......
  • GL-Outlining a movie plot 20221117
    TopicOutliningamovieplotwhatwasthelastmovieyousaw?Didyoulikeit?银行商人AndyDufresne因谋杀妻子及其情人而被定罪,并在肖申克监狱被判处终身监禁。生......
  • 2022-11-17学习内容
    1.案例-购物车-购物车列表展示1.1ShoppingCartActivity.javapackagecom.example.chapter06;importandroidx.appcompat.app.AppCompatActivity;importandroid.net......
  • 20221117-python-条件判断
    1.浅拷贝与深拷贝        2.分支语句   ......
  • cobra 2022 简明教程 - 8 个知识点快速上手
    cobra是命令行程序开发的辅助工具,官方源码在​​https://github.com/spf13/cobra​​,知名程序k8s/githubcli/hugo均使用其开发,但由于网上大多数教程过时且繁琐,提......
  • 2022.11.17
    ###noip模拟暴力都好高明啊,感觉又是除了暴力无甚可讲的一天。。。##出错点t4:又犯老毛病,长一点复杂一点就读不懂,没写暴力,然而这题暴力分给得很足。。。##过程分析......
  • 迟到的windows11虚拟机初体验
    迟到的windows11虚拟机初体验近日微软发布了继win10“最后一个版本”的windows11,相信很多小伙伴早已一睹为快,而我呢当时也是立即就了解到这个事情了,只不过一直没着急真正的......
  • 18709 魔法
    Description农夫约翰的奶牛场有很多奶牛,奶牛有黑白两种颜色。现在奶牛们排成整齐的一列去参加镇上的游行活动。约翰希望白色奶牛都排在前面,黑色的奶牛都排在后面。但现在......
  • 2022年11月系统架构设计师考试知识点分布
    2022年11月系统架构设计师考试知识点分布薛大龙 邹月平施游 1、上午知识点分布表1是按题号对应的考试内容。表1按试题号分布的考查内容试题号知识点试题号知识点1云计......
  • 【1117】
    792. 匹配子序列的单词数  中等   相关企业给定字符串 s 和字符串数组 words,返回  words[i] 中是s的子序列的单词个......