12人加入学习
(0人评价)
算法面试必备数据结构和算法
价格 $9,999美元
该课程属于 2023.7.9 CS课程 请加入后再学习
  • HashMap和Hashtable的区别

Map interface.

Allow NULL(key);

unsynchronized.

not ordered。 eg:  2%16=2.  1%16=1,先存进去的数不一定排在前面。

底层都是array

 

  • Hashfunction

选择质数,不然可能有公约数导致hash confliction。 

 

有hash confilct的话:

Separete chaining.可以用链表(linklist)连接起来所有同hash value的node。(主要记忆即可)。优化方向还可以是BST(访问时间logn)

或者Linear probing:当前confict,找到下一个,直到找到空位。 但是可能效率比较低。

Double Hashing: 发现conflict, 用secondary hash、

 

  • rehash,根据load effector。

 

常见题型

  1. sliding window
  2. 利用hash思想去重,赵duplicate,0(1)时间查找
  3. 有关cache的设计题

 

解题思路,一开始没想法先找brute force的复杂度,然后想办法优化。

例题: contain Duplicates. 利用hashmap(num[i],i),然后用一个pointer代表尾部, find有无相同,然后判断index是不是前面k长度以内的。 也可以put value的时候判断之前最近的index是哪个,然后更新掉value,index的pair

也可以排序好,然后用list《node》存储index和value,然后for去判断相邻的==value的index在不在范围内

 

例题48min:longest substring without repeating characters.   

可以用two pointer做法,然后hashmap存Slow和fast中间的字母判重复,然后重复了之后slow直接移动到fast的位置。不用慢慢移动。

 

 

例题:1h2min。 shortest substring contains the all given characters.

brute force。

而且这里hashpmap不能存index,因为"abbbc",s就不能直接跳了,要一点点移动。f是未满足sunstring的时候移动,s是满足的时候移动。

检查hash是否符合的可以用for loop。 也可以用一个global variable match=n; hashmap里面存需要出现的count,出现一次hash里面对应元素-1. 然后match+1.也可以表示是否符合标准,这样就不用for遍历hash了

 

 

例题1h38min: repeated DNA sequences()可以直接把所有10位长度substing存到hash,然后后面判断有没有出现过

还可以用bitmap,A:00,C:01,G:10:,D:11.  hashvalue作为key也可以,substring作为value

 

 

例题:LRU cache:hashmap

linkedlist只能表示加进cache的顺序,但是get(1)不能反映到linklist里面,

queue不行因为移动的不一定是开头和末尾,中间的无法改变。

思路2h17min处:hash存key,node,node是新class

[展开全文]
shaning · 2023-11-07 · Session 9 0

授课教师

Yuhan老师

课程特色

视频(9)

学员动态

Bianyw 加入学习
shjm 加入学习
YanHuang 加入学习
duoduo99 加入学习
wuhaojia 加入学习