hash数据结构练习
程序员文章站
2022-07-15 14:16:05
...
在考研中,线性表、链表等是考察核心,但是实际面试中一般都会问hash的。QAQ,我在面中型游戏公司和BAT级的公司的时候都问到了hash,所以还是挺重要的。
直接上题。后续再补充知识点。
山东理工OJ2123(母校OJ真给力)
查找练习 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
所谓hash,可以认为是用空间换取时间的思想。
想想看,对于一个大数组,如果遍历的话,会需要特别长的时间。但是数组具有随机访问特性,按下标进行访问的时间是O(1),非常快。
解决方案:
class Solution(object):
def __init__(self, totals, searchs):
self.totals = totals
self.searchs = searchs
self.MAX = 100010
self.l = self.MAX*[False]
def init_list(self):
for i in range(self.totals):
target = int(input())
self.init_list_exec(target)
def init_list_exec(self,target):
self.l[target-1] = True
def get_result(self):
for i in range(self.searchs):
target = int(input())
self.print(target)
def search(self,target):
if self.l[target-1]:
return True
return False
def print(self,target):
if self.search(target):
print('YES')
else:
print('NO')
def get_result():
totals, searchs = input().split()
totals, searchs = int(totals), int(searchs)
s = Solution(totals, searchs)
s.init_list()
s.get_result()
get_result()
上一篇: Redis Hash 哈希 结构
下一篇: redis的hash结构使用