例题:25min
insert Delete GetRandom. 类似API的设计
getRondom的话可以用math.random的方法。
hashmap,+array_list.
但还有问题,重复加入怎么办,可以用val:list<indexs>
通常design的题要用更多的data structure去实现
例题 :Longest Duplicate substring.47min
我的一点想法:既然重复,那么可以直接双pointer,看字母是否重复,有重复的话,计算substring长度,然后两个起点开始substring check就可以。但是abacabac的话不太实用。
hahsset的用较大一点的质数
nlogn算法。 比如说(0,5)(1,6),(2,7)这些遍历,如果没有就说明siez太大,然后检测size/2,检查(0,2)(1,3),。。。如果有的话,检查上稍大一点,(0,3),(1,4).。
hashmap和hashset的区别,有collision?
- Treemap
Treemap红黑树,可以让key按照顺序排列,hahsmap不行 。用的是BST
C++有么????map好像就是。Hashmap的好像是unorder_map的实现
complete tree: 所有层数除了最后装满,最后层数尽可能向左靠。(底层实现heap的一个用法)
例题:longest continuous subarray with absolute diff less than or equal to limit
brute force:for for确定subarray,内部还得两两对比,或者最大值或者最小值
优化:slidingwindow+treemap找最值(logn)如果>limit,移动左窗口,并且treemap.remove(num[left])
而且treemap{val:{indexs可能重复}},index要去掉最前面的,不存index的话找不到谁最先。比如remove 2:[2,3,5],要是i=2的会把3和5的去掉,这样就导致后面的误判。
也可以用stack或者queue去优化,比如用global的量去存max差别?
例题:1h53min Data Stream as Disjoint intervals.
treemap ,找最值,最小的最大数和最小的最大数2h10min. key:value 就是low bound和high bound,注意相连的合并情况 [1,2]和[4,5]插入3就变成[1,5]。