maimimum moving avarage:
maimimum moving max:
:可以一用heap么。不可以,因为不知道pop的是不是头
:可以用sorted stack
:思路:,squential,,,每到一个ele时,有可能时后面max,所以先判断前面《的话,删掉然后加上本个ele,》的话直接加上,因为stack村的是有可能是max的东西。 如果move 后out of window,先删除对应操作,这样stack顶永远是max当前window。
这样用的就是deque,或者double linklist,
out of window 的时候要注意判断头部是不是out? index stack:记录index,,然后j-i>=k,就是out of window
dfs stack的模板:
DFS(s,g):
stack s,
end constraint g,
initilaize s: push first node to s and visited hashet, parent hashmap.
while(stack not empty:){
pop node;
if(cur==G) return
for (each neighburs not visited){
add neighvbut to visited
add cur as parent of n
push n onto stack
- 图论
1.Maze , 2D array, 赵路径
例题:maze II。
使用的三个数据结构:“hash set, bisited”"hahmap,path" "stack或者queue"
C++中可以用vector<bool>也可以待变visited
看题目要求是不是要path,如果去找neighbour,
Maze中可以用i,j+-1,或者用一个direction矩阵代表更多方向,然后for循环去迭代方向
2. 2D array all points
flood fill. 填色
思路:single point dfs/bfs都可以, 时间complexity都一样 |V|+|E|.
dfs 的recursion的代码量简洁。
例题:number of island。
思路,for矩阵,然后dfs开始,碰到1就边0,然后整体计算number
,all points 的dfs就是for single point的dfs
3。 friend circles, 邻接矩阵,像但由于是一个对角线的all points
可以用dfs找path,如果能有一条path,说明一个circle,没有说明第二个circle
for i 是代表人,利用visted代表circle,dfs之后count++就是circle的数量
4. 例题:pacific atlantic water flow.
还可以用dp的结果,避免重复计算
,可以:aLL points+DP
DP里面不同的值来代表不同的意思
还要回溯,底部true,回溯回去也要true,一路的retrun
selected point:
5. non 2D array
例题:word ladder
思路:每个word是一个vertex,
可以用stack。
要解决的问题:neighbour,hashset,hahmap,start
这里难点在于如何判断neighbour,
思路,可以对于当前单词进行每个位置的字母改变,然后find 字典里是否有出现。
BFS可以求最短路径