栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

设哈希表长为7,记录关键字组_数据结构哈希查找例题?

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

设哈希表长为7,记录关键字组_数据结构哈希查找例题?

定义

哈希表也称为散列表(Hash table),是根据键(Key)直接访问内存存储位置的一种数据结构。也就是哦,我们可以通过计算一个关于键值的函数,将所需要查询的数据映射到表中一个位置来访问记录,这么一来就可以快速查找数据了。而这个映射函数我们称为散列函数,存放记录的数组称做散列表。

生活中也会经常遇到哈希表的使用案例。例如通讯录,无论手机通讯录,还是微信,qq等,可以通过昵称,备注找到对应的联系人,虽然背后的实现方式可能不同,但是都使用了哈希表的这个思想。

在编程语言中,字典(dict)通常也被称为映射(map),散列表(hash table),查找表获关联数组等。这种数据结构能够高效查找、插入和删除任何给定键关联的对象。我使用最多的编程语言是Python。在Python中,字典的键必须是可hash的(计算其唯一性),例如数字、字符串或者元组,这几种数据结构都是不可更改的(如果更改,对应变量的物理地址发生变化,可使用id()这个内建函数查看)。时间复杂度是 O ( 1 ) O(1) O(1),空间复杂度是 O ( n ) O(n) O(n),是一种比较典型的空间换时间的数据结构。

案例

题目地址:无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例代码:

    def lengthOfLongestSubstring(self, s: str) -> int:
        tmp_set = set()
        n = len(s)
        pointer, res = -1, 0
        for i in range(n):
            if i != 0:
                tmp_set.remove(s[i - 1])
            while pointer + 1 < n and s[pointer + 1] not in tmp_set:
                tmp_set.add(s[pointer + 1])
                pointer += 1
            res = max(res, pointer - i + 1)
        return res

程序设计思想:使用双指针的窗口滑动以及hash表查询结合的方式。双指针分别是i,pointer。while循环就是控制窗口大小。用到hash表的就是Python中set数据结构。

小总结

hash表的特点:查询快速,又能快速插入和删除元素;能在 O ( 1 ) O(1) O(1)的时间复杂度内找到某一元素,是效率最高的查找方式;同时其也是最典型的空间换时间的数据结构。

在实际编程中可以考虑结合问题合理地使用这种数据结构。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/783145.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号