哈希表

哈希表:正方形

泄露秘密 提交于 2019-12-10 20:01:47
摘一下题目: 正方形 总时间限制: 3500ms 内存限制: 65536kB 描述 给定直角坐标系中的若干整点,请寻找可以由这些点组成的正方形,并统计它们的个数。 输入 包括多组数据,每组数据的第一行是整点的个数n(1<=n<=1000),其后n行每行由两个整数组成,表示一个点的x、y坐标。输入保证一组数据中不会出现相同的点,且坐标的绝对值小于等于20000。输入以一组n=0的数据结尾。 输出 对于每组输入数据,输出一个数,表示这组数据中的点可以组成的正方形的数量。 样例输入 4 1 0 0 1 1 1 0 0 9 0 0 1 0 2 0 0 2 1 2 2 2 0 1 1 1 2 1 4 -2 5 3 7 0 0 5 2 0 样例输出 1 6 1 本来是个大水题,但是首先我把初高中数学知识全给忘了,其次数据量非常大,必须自己手写哈希表。 我最开始的思路是以两个点的中点作为哈希值把这些所有点放进各个桶里,再在每个桶的所有点里面检测。但是这样TLE了……因为n^2级别的数据放进n级别的桶里……再两两比较……代价……emmm 参考了别人的思路,是两两取出点,再计算另外两个点坐标,看是否有这两个点。 我看到的一个哈希表的代码是 最开始的辣鸡代码: # include <iostream> # include <map> # include <vector> # include

数据结构:哈希表例子

时间秒杀一切 提交于 2019-12-10 16:06:28
问题   如何存储字典里的所有单词能够让搜索、更新的效率快? 哈希表的解决方案 JDK中HashMap的实现就是参照了这种思路,我们可以自己写一个 package com.study.jdk; import java.io.Serializable; /** * @author mdl * @date 2019/12/10 */ public class SimpleHashMap<K, V> implements Serializable { /** * */ private static final long serialVersionUID = -7278101382866134374L; transient Node<K, V>[] table;// 存储头节点的数组 private int size;// 元素个数 private static int defaultCapacity = 16;// 默认容量 private static float defaultLoadFactor = 0.75f;// 扩展因子 public SimpleHashMap() {} public SimpleHashMap(int capacity, int loadFactor) { defaultCapacity = capacity; defaultLoadFactor =

整理所学之HashMap | 第一篇

拟墨画扇 提交于 2019-12-10 12:37:55
本文参考: https://blog.csdn.net/yyyljw/article/details/80903391 https://www.jianshu.com/p/a89e9487a06c https://blog.csdn.net/woshimaxiao1/article/details/83661464 https://blog.csdn.net/eaphyy/article/details/84386313 所学浅薄,抛砖引玉。 这里会涉及: 1. 哈希表 2. HashMap 的hash算法 static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16); } 3. HashMap 查找数组下标为什么是 (n - 1) & hash 哈希表 散列表(也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。     来让我们在研究哈希表之前,先看下其他数据结构    数组: 是在内存中存储相同数据类型的物理上连续的空间。特点:查找快,插入、删除等更新操作慢。    线性链表:

数据库索引有关的数据结构你搞清楚了吗?

安稳与你 提交于 2019-12-10 07:31:40
数据库索引可是Java后端开发经常打交道的东西,小豪在一次面试中就被这个问题给难住了,我们一起来看看小豪是怎么出糗的嘻嘻,大家一起笑话他。 文章人物及背景: 小豪: 23岁,武汉某双非本科不知名专业大学四年级学生,成绩一般,面临毕业,对后端开发、Java很感兴趣,正求职找工作。 宇哥: 跟小豪通过租房认识,两人是室友,26岁,毕业后长期从事软件开发工作,是一个半吊子工程师,兴趣爱好是吹牛,不打草稿那种。 文章目录 1.1 面试失败 1.2 啥都懂一点儿的宇哥 1.3数据库索引的常用数据结构对比 1.3.1哈希表和有序数组 1.3.2 二叉树和多叉树 1.3.3 B+树 1.4充满信心的小豪 画外音 参考文献 更多 1.1 面试失败 小豪热爱编程,觉得写代码、做网站开发无敌酷炫雕炸天,在某站上看完了某马基础班和就业班的教学视频,觉得自己已经成为了斗宗强者,踌躇满志,海投简历,终于被某单位临幸,欣喜若狂,欣然赴约。 这次的面试官是一个中年大叔,发量尚可,不过发际线有力争上游的趋势,穿着浅蓝色的衬衫,最上面的一颗扣子没有扣上,衣领随意翻着,不苟言笑。识人面相的小豪暗道一声不妙,这个面试官可能不简单。 面试官:先自我介绍一下,重点说一下你做过的项目。 小豪心里一乐,嘿嘿,昨晚刚刚背过的,一阵摇头晃脑过后… 面试官: 你刚刚提到了数据库优化,那你有哪些优化经验? 小豪:(依然自信)创建索引

一名前端小白的学习笔记(1/N)--js的对象、数组、哈希表

南楼画角 提交于 2019-12-10 06:52:01
所有的javascript对象,包括Array对象在内实际上就是一个哈希表,属性名称就是哈希表的key,而属性的值就是哈希表的值。 Array对象与通常意义的数组对象并不相关,通常的数组仅能通过下标来定位,而javascript中的Array却可以像哈希表一个通过key来定位集合中的对象。 可以将一个function直接作为值赋给对象的“哈希表”。 yaml(Yet Another Markup Language)描述数据时,将所有的数据分成三种类型 第一种类型是scalar(标量),一个单独的string或数字,比如“北京”这个单独的词。 第二种类型是sequence(序列),若干个相关的数据按照一定顺序并列在一起,又叫做array(数组)或List(列表),比如“北京,东京”。 第三种类型是map(映射),一个键/值对(Key/value),又称作hash(散列)或dictionary(字典),比如“首都:北京”。 文中提到的对json的四条规则却正好剖析了javascript描述数据的方式: 并列的数据之间用逗号(“,”)分隔。 映射用冒号(“:”)表示。 并列数据的集合(数组)用方括号("[]")表示。 映射的集合(对象)用大括号(“{}”)表示。 映射无法以数组下标的方式访问 从定位到成员的方法来看,映射使用key来定位其中的成员,而数组使用下标,映射无法使用下标定位

Python类中特殊方法__eq__和__hash__的关系

♀尐吖头ヾ 提交于 2019-12-10 01:47:39
class Point ( object ) : def __init__ ( self , x , y ) : self . x = x self . y = y def __repr__ ( self ) : return repr ( ( self . id , self . x , self . y ) ) def __eq__ ( self , other ) : return self . x == other . y and self . y == self . y def __hash__ ( self ) : return hash ( ( self . x , self . y ) ) 上面定义了一个二维点的类其中 __repr__ 主要用来以一个字符串表示该类的实例,例如 Point(1,2) ,在调试时打印该点会获得字符串 (1,2) 。 当对两个点的实例进行值的比较时,比如 p1=Point(1,1) p2=Point(1,2) ,判断 p1==p2 时 __eq__() 会被调用,用以判断两个实例是否相等。在上述代码中定义了只要x和y的坐标相同,两个点相等。需要注意, __eq__() 对 is 不生效, == 是比较的值,而 is 比较的是引用,也就是内存地址。举个例子, p1=Point(1,1) p2=Point(1,1) , p1==p2 为

散列表与hash函数

纵饮孤独 提交于 2019-12-09 22:25:40
散列表: hash冲突解决 1)开放定址法 : 存入:冲突的 进行二次处理,加线性,平方等;以线性为例,会逐个向下找,直到找到一个空的位置然后放进去 查找:与存入相似,先hash定位起始的查找位置,然后向下找等于的对象,如果遇到空的说明不存在 删除:因为上面查找遇空则说明不存在,所以不可以直接删除,仅仅可以标记删除 2)链表: 3)再hash:产生冲突时,计算另一个哈希函数地址,到不冲突为止。使用一组散列函数 hash1(key),hash2(key),hash3(key)……我们先用第一个散列函数,如果计算得到的存储位置已经被占用,再用第二个散列函数,依次类推,直到找到空闲的存储位置。 4)公共溢出区:把溢出的放到一起 装载因子=填入表中的元素个数/散列表的长度 假设我们有 10万条URL 访问日志次数表,如何按照访问次数给 URL 排序? 1:保存次数 遍历 10 万条数据,以 URL 为 key,访问次数为 value,存入散列表,同时记录下访问次数的最大值 K,时间复杂度 O(N)。 k不大可以使用桶排序,否则快排 有两个字符串数组,每个数组大约有 10 万条字符串,如何快速找出两个数组中相同的字符串? 一个用来查,一个用来插入 以第一个字符串数组构建散列表,key 为字符串,value 为出现次数。再遍历第二个字符串数组,以字符串为 key 在散列表中查找,如果

二叉树与堆

谁说胖子不能爱 提交于 2019-12-09 22:23:01
二叉树有哪几种存储方式?哪种适合于用数组来存储? node 数组存储? 两种特殊二叉树 满二叉树:除了叶子节点之外,每个节点都有左右两个子节点 完全二叉树:叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大 节点的高度:节点到叶子节点的最长路径 节点的深度:根节点到这个节点的边的个数,从0开始 节点的层数:节点的深度加1,从1开始 树的高度:根节点的高度 树结构的存储: 1)链式存储法:节点=数据+左节点指针+右节点指针 2)数组存储法: 如果是完全二叉树:根节点存储在下标为1,那左子节点存储在下标 2 * i = 2 的位置,右子节点存储在 2 * i + 1 = 3 的位置。 如果节点 X 存储在数组中下标为 i 的位置,下标为 2 * i 的位置存储的就是左子节点,下标为 2 * i + 1 的位置存储的就是右子节点。反过来,下标为 i/2 的位置存储就是它的父节点。通过这种方式,我们只要知道根节点存储的位置(一般情况下,为了方便计算子节点,根节点会存储在下标为 1 的位置),这样就可以通过下标计算,把整棵树都串起来。 二叉树的遍历: 前序遍历 中序遍历 后序遍历 二叉查找树: 任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值 查找:类似二分查找 插入:也是先查找

集合相关

假如想象 提交于 2019-12-09 21:48:52
集合笔记 集合架构 Collection(接口): API: 遍历方式: Set(接口): HashSet: HashSet研究的两个问题: LinkedHashSet: TreeSet: TreeSet的排序: List(接口): ArrayList: 遍历方式 LinkedList: 遍历方式:同ArrayList(略) LinkedList和ArrayList的区别 Vector:(淘汰) 遍历方式:同ArrayList(略) 总结: map(接口): HashMap: LinkedHashMap: HashTable: TreeMap: IdentityHashMap: ConcurrentHashMap: Properties: 集合工具类 Collections工具类: 集合架构 Collection(接口): 所有单例集合的父类Collection集合的功能所有单例集合都可以直接使用; API: public boolean add(E e): 把给定的对象添加到当前集合中 。 public void clear() :清空集合中所有的元素。 public boolean remove(E e): 把给定的对象在当前集合中删除。 public boolean contains(Object obj): 判断当前集合中是否包含给定的对象。 public boolean

跟数据库索引有关的数据结构你搞清楚了吗?

五迷三道 提交于 2019-12-09 21:36:20
数据库索引可是Java后端开发经常打交道的东西,小豪在一次面试中就被这个问题给难住了,我们一起来看看小豪是怎么出糗的嘻嘻,大家一起笑话他。 文章人物及背景: 小豪: 23岁,武汉某双非本科不知名专业大学四年级学生,成绩一般,面临毕业,对后端开发、Java很感兴趣,正求职找工作。 宇哥: 跟小豪通过租房认识,两人是室友,26岁,毕业后长期从事软件开发工作,是一个半吊子工程师,兴趣爱好是吹牛,不打草稿那种。 文章目录 1.1 面试失败 1.2 啥都懂一点儿的宇哥 1.3 数据库索引的常用数据结构对比 1.3.1 哈希表和有序数组 1.3.2 二叉树和多叉树 1.3.3 B+树 1.4 充满信心的小豪 画外音 参考文献 更多 1.1 面试失败 小豪热爱编程,觉得写代码、做网站开发无敌酷炫雕炸天,在某站上看完了某马基础班和就业班的教学视频,觉得自己已经成为了斗宗强者,踌躇满志,海投简历,终于被某单位临幸,欣喜若狂,欣然赴约。 这次的面试官是一个中年大叔,发量尚可,不过发际线有力争上游的趋势,穿着浅蓝色的衬衫,最上面的一颗扣子没有扣上,衣领随意翻着,不苟言笑。识人面相的小豪暗道一声不妙,这个面试官可能不简单。 面试官:先自我介绍一下,重点说一下你做过的项目。 小豪心里一乐,嘿嘿,昨晚刚刚背过的,一阵摇头晃脑过后…… 面试官: 你刚刚提到了数据库优化,那你有哪些优化经验? 小豪:(依然自信