算法笔记:哈希表的入门使用(C/C++)

问题描述:
给出N个正整数,再给出M个正整数,问这M个数中的每个数分别是否在N个数中出现过。N、M <= 10^5;
eg:N=5,M=3,N个正整数为{8,3,7,2,6},欲查询的M个正整数为{7,2,4},于是后者中只有7和2在N个正整数中出现过。

问题解答:
常规思路是:对每个要查询的正整数x,遍历所有N个数,看是否有一个数与 x 相等。这种做法的时间复杂度是O(NM),当N和M都很大时,时间复杂度便会无法承受。
改进思路:可以用空间换时间,即设定一个 bool 型数组 HashTable[10010],让其初始为 false,如果正整数 x 在N中出现过,则让 HashTable[x]=true;然后再遍历M,如果M中的某个数X,HashTable[X]=true则代表这个数在N中也出现过。这样一来,时间复杂度就是O(N+M),空间复杂度为O(n).

#include<cstdio>
#include<iostream>
#include
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值