查找练习 hash——出现过的数字

查找练习
hash——出现过的数字

题目描述

有一个数据字典,里面存有n个数字(n<=100000),小明现在接到一个任务,这项任务看起来非常简单——给定m个数字,分别查询这m个数字是否出现在字典之中;但是考虑到数据量的问题,小明找到了善于编程的你,希望你可以帮他解决这个问题。

输入

输入数据只有一组!

第一行包含两个整数n m,分别代表字典中数字的个数和要查询的数字的个数。

接着n行代表字典中的n个数字。

最后m表示要查询的数字。

输出

如果某个数字存在,则输出YES,否则输出NO

示例输入

5 3
1
2
3
4
5

5
4
10

示例输出

YES
YES
NO

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<malloc.h>
#include<stack>
using namespace std;
int main()
{
   int n,m,i,j;
   int a[100001],b[100001],c[100001];
   memset(c,0,sizeof(c));
   cin>>n>>m;
   for(i=1;i<=n;i++)
   {
    cin>>a[i];
    c[a[i]]=1;
   }
   for(j=1;j<=m;j++)
   {
    cin>>b[j];
    if(c[b[j]]==1)
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
   }
}

时间: 2024-08-09 22:45:21

查找练习 hash——出现过的数字的相关文章

SDUT OJ 查找练习 2123 hash——出现过的数字

#include<iostream> using namespace std; int a[100000]={0}; int main() { int m,n,i,b,c; cin>>n>>m; for(i=0;i<n;i++) { cin>>c; a[c]=1; } while(m--) { cin>>b; if(a[b]==1) cout<<"YES"<<endl; else cout<

Codevs_1230_元素查找(set/Hash)

描述 http://codevs.cn/problem/1230/ ... 分析 就是见识了一下简单的Hash是啥...set也可以做(其实我也不会用set). 给出一组数,查找其中是否存在某一个数x.很容易想到搞个桶,但是数字如果很大,比如整型上限,桶就开不下了,可以离散处理(以前一直用的自己脑补的离散方法).用Hash的话就是:假设共n个数,则记mod为任意一个大于等于n的数,这样x%mod在[0,mod-1],至少有n种不同的值,然后以模作为数组下标,如果已经被占了就往后走.查找的时候也是

codevs1230元素查找(hash)

1230 元素查找 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 给出n个正整数,然后有m个询问,每个询问一个整数,询问该整数是否在n个正整数中出现过. 输入描述 Input Description 第一行两个整数 n 和m. 第二行n个正整数(1<=n<= 100000) 第三行m个整数(1<=m<=100000) 输出描述 Output Description 一共m行,若出现则输出YES,否则输出NO

在一个数组中查找两个重复出现的数字

题目如下:现有一个数组长度为n+1,里面存放有1到n-2,顺序不定,其中有两个数字出现了两次,现在要找出那两个数字. 例子A={2, 3, 1, 4, 5, 2, 4}, 这个数组长度为7,存放了1到5,但2和4出现了两次,程序输出2和4 方法1 蛮力查找 主要思想:对于数组中的第i个数,查找i+1到末尾的所有整数,一个数如果出现了两次就可以在第一次后面找到第二次出现的数. 时间复杂度 O(n^2) #include<stdio.h> void find_duplicates(int* num

trie树查找和hash查找比较(大量数据)

trie树代码 #include<iostream> #include<stdio.h> #include<iostream> #include<string> #include<stdlib.h> #include<fstream> #include<sstream> #include<vector> #include<string> #include<time.h> using na

二分查找和hash查找

转载:http://blog.csdn.net/feixiaoxing/article/details/6844723 无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1) 普通的数据查找 设想有一个1M的数据,我们如何在里面找到我们想要的那个数据.此时数据本身没有特征,所以我们需要的那个数据可能出现在数组的各个位置,

373 Find K Pairs with Smallest Sums 查找和最小的K对数字

给定两个以升序排列的整形数组 nums1 和 nums2, 以及一个整数 k.定义一对值 (u,v),其中第一个元素来自 nums1,第二个元素来自 nums2.找到和最小的 k 对数字 (u1,v1), (u2,v2) ... (uk,vk).示例 1:给出: nums1 = [1,7,11], nums2 = [2,4,6],  k = 3返回: [1,2],[1,4],[1,6]返回序列中的前 3 对数:[1,2],[1,4],[1,6],[7,2],[7,4],[11,2],[7,6],

【算法】——查找:旋转数组的最小数字(改造二分法)

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,改数组的最小值为1. 分析:既然说是改造的二分法,那么就是找到中间值,然后根据左边还是右边去找最小值,然后在左边或者右边再找中间值再分左边和右边. 现在举例来人工肉眼找出最小值,然后找规律 因为是递增的旋转,所以最小值一定是在大值的右边 其中有一个关键的问题:如何判断到底是左边有序还是右边有序? 答:

hash函数查找和ASL计算

Hash表的"查找成功的ASL"和"查找不成功的ASL" ASL指的是 平均查找时间 关键字序列:(7.8.30.11.18.9.14) 散列函数: H(Key) = (key x 3) MOD 7 装载因子: 0.7 处理冲突:线性探测再散列法 查找成功的ASL计算方法: 以下求解过程是按照"计算机统考的计算方法",不同的老师.教材在"处理冲突"上可能会有不同的方法,所以最主要的是掌握原理即可,对于考研的朋友最好掌握统考真题