欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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()