-
有言在先
1.懵逼的时候怎么办
- 暴力破解?
- 从最基本问题开始解决,然后向后思考找最近重复子问题,泛化(递归?动态规划?)因为计算机只能做if else for loop recursion 这些重复问题
2. 刷题最大误区
- 只刷一遍不总结,不看大神的解法
3. 优化算法问题的核心思想
-
让问题的思考提升维度,即:用空间换时间
-
数组问题总结
- 引入 j 来记录需要的条件(283 移动零元素问题)
- 双指针!!!,基本都是这种方法,从外向内扫(最大容器问题)
- 一位数组枚举模板 必须形成肌肉记忆
for (int i = 0;i<numsize-1;i++){
for (int j = i+1;j<numsize;j++)
}
- 为了查找方便,可以用哈希表来记录数组元素
-
链表问题总结
- 链表问题大部分都是改变cur.next的指向,类似于穿针引线
- 虚设一个头结点用来解=解决头结点比较特殊的情况(eg.删除链表中的重复元素)
- 特殊问题才需要改变节点值
- 双索引技巧在链表中同样适用(eg.删除链表倒数第k个元素)
网友评论