Algorithm
【回溯法】剑指 Offer 34. 二叉树中和为某一值的路径
选择列表:对于当前节点来说,选择左右两个节点是其选择列表
路径:根节点一定在路径中,因此需要事先加入trace中;
结束条件:当前节点是叶子节点
【后序遍历】 124. 二叉树中的最大路径和
helper 函数返回以root为终点的单边最大路径和:
|-- 先计算分别以左右子节点为终点的最大路径和分别为left,right
|-- helper 函数根据left、right的正负以及大小,返回最大单边路径和
|-- 顺便记录以root为根节点的带拐(人字形)最大路径和(全局变量)
【后序+先序】297. 二叉树的序列化与反序列化
序列化【后序遍历】+ 反序列化【前序遍历】
需要注意的是,序列化对于nullptr的节点使用特殊字符占位。
反序列化则使用全局指针,从左向右逐个遍历。
【DFS】341. 扁平化嵌套列表迭代器
dfs 方法遍历嵌套列表,函数输入不同于一般的树遍历(根节点),而是一个列表
|–对于列表中的所有元素
|–当遍历到叶子节点时,将叶子节点加入结果集
|-- 否则当前元素还是一个列表,则需要递归处理这个列表
对于hasnext 方法,判断 当前迭代器是否是end()即可
对于next 方法,则返回当前迭代器的值并位移一位
【翻转链表】25. K 个一组翻转链表
25. K 个一组翻转链表 递归过程,函数返回的是反转后的head节点,处理完前k个元素后,对于后面n-k个元素的处理,只是链表长度变化了,处理逻辑完全一样,只需要将前k个元素的最后一个元素指向 后面n-k个元素反转后的头节点
函数出口:当前链表长度小于k,则不用处理,直接返回头节点。边界条件,当前节点为空。
函数逻辑:
|–如果当前节点为空,则返回
|–找出第k+1个节点,如果找不到则说明长度不够,则直接返回
|–反转从head到第k个节点的链表(prev初始为null)
|–将head->next = reverseKGroup(第K+1个节点,k)
|–返回head
Review
常见限流算法
python time.time vs time.clock
在unix-based os上,time.time 是wall clock 时间,time.clock是cpu时间(在当前进程上花的cpu时间)
>>> import time
>>> print(time.time(), time.clock())
1359147652.31 0.021184
>>> time.sleep(1)
>>> print(time.time(), time.clock())
1359147653.31 0.02168
在windows os 上,time.time 和 time.clock 都是wall clock时间
>>> import time
>>> print(time.time(), time.clock())
1359147763.02 4.95873078841e-06
>>> time.sleep(1)
>>> print(time.time(), time.clock())
1359147764.04 1.01088769662
Tips
- git reset 命令 取消所有的commit之前的 git add操作,git reset <file_name>取消指定文件的add
- git checkout file 命令则是使用暂存区中的文件覆盖
- git pull 免密钥,https模式中,提前在
.git-credentials
文件中配置密钥时,密码不能包含@
字符,否则识别不出来