近期在刷题,记录一下对自己有帮助的教程和材料,以及遇到的一些问题。
穷举,是计算机最擅长的求解方式。
算法,尽可能让计算机聪明地穷举。
一、算法
1. 动态规划
动态规划(dynamic programming, DP)是将一个问题拆成几个子问题,分别求解这些子问题,即可推断出大问题的解。
适用问题:
a. 如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响
b. 大问题的最优解可以由小问题的最优解推出
参考教程
讲解得非常好的两个教程。
a. 从现实问题分析动态规划算法意义 https://www.zhihu.com/question/23995189
b. 从应试解题的角度讲解动态规划 https://blog.csdn.net/m0_37907797/article/details/103231054
2. 二叉树
参考教程: https://labuladong.gitbook.io/algo/mu-lu-ye-1/mu-lu-ye-1/er-cha-shu-xi-lie-1
这个教程介绍了二叉树的递归方法的解题框架,思路清晰,但我不赞成作者的这个观点。
把题目的要求细化,搞清楚根节点应该做什么,然后剩下的事情抛给前/中/后序的遍历框架就行了,我们千万不要跳进递归的细节里,你的脑袋才能压几个栈呀。
刚开始跟着这个教程做题的时候,虽然做了好几题,但一直感觉似懂非懂。我大概知道作者的解题思路,但并不理解这个解题框架的作用和意义。
一直到自己尝试跟着算法,一层层推算法的递归过程,我才对这个算法框架有了更深的理解。所以,我觉得最初学二叉树的时候,一定要多画递归树,配合递归树来学习算法框架。
二、测试用例
- 首先关注题目信息
进行算法测试时,首先要看清题目中的各个变量的范围,根据变量的极值进行用例测试。