notes:归并排序用于两个有序链表的排序很有效果,此题目重点应该是在想到需要一个额外的伪头节点
概率模型检测
对《Principles of Model Checking》一书概率模型检测部分的翻译。
未完成 先鸽了
《剑指offer》 21.调整数组顺序使奇数位于偶数前面
note:数组内凡是需要交换位置的题目,很容易想到双指针的解法,快慢指针、首尾指针都是常见的应用。
《剑指offer》 22.链表中倒数第k个节点
notes: 链表问题优先考虑双指针
《剑指offer》 20.表示数值的字符串
note:这道题两种解法:确定有限状态自动机、if-else硬判断。前者状态机我认为是CS学生应该掌握的一种能力(编译原理中有用到),但是效率可能会有点慢。后者需要比较清晰的思维进行判断,当然基于状态机似乎也可以更好写一点。Ps.一鸽鸽一周,不愧是我!
《剑指offer》 18.删除链表的节点
note:一般在删除链表或者插入链表时,会采用一种虚假头节点的方法,来方便对头节点的处理。
《剑指offer》 19.正则表达式匹配
note:两个字符串匹配的问题,经典的解法就是使用二维dp数组进行动态规划求解,因为显然字符串匹配就是一个可以分解为小问题、依赖小问题来解决大问题的问题。
《剑指offer》 17.打印从1到最大的n位数
note: 有点搞不懂这道题是为了考什么,快速幂?《剑指》上面讲的是大数问题,就把大数问题的写法也学习了一下记录下来。
《剑指offer》 16.数值的整数次方
note:快速幂是一个常用经典需要好好掌握的知识点。另外此题中如何处理指数为负数的情况的方法值得总结
《剑指offer》 15.二进制中1的个数
note:两个特质:
- 与运算的定义:
- 若$n\&1=0$,则$n$的二进制中最右一位为0
- 若$n\&1=1$,则$n$的二进制中最右一位为1
- $n\&(n-1)$:表示二进制数字$n$最右边的1变为0,其余不变
- 因为$(n-1)$表示二进制数字$n$最右边的1变为0,此1右边的0都变为1