数据结构
优化算法能不能减少某些运算,这样效率。利用属于输的关联,dp也是将某些运算存下来,省掉了
算法
一些算法思维:反向思考,验证是否成立,不成立的情况怎么做,成立就不采取动作,那么掉出这个逻辑后再去验证
对于数组,顺序上存在一定逻辑的,研究清楚,这个次序的影响,当前操作是如何被次序影响的,精简逻辑不要被其他内容影响
有指针,索引,一定要想到是否越界,在逻辑判断包含对索引或指针有效性判断时要提前
while循环的使用,满足某种条件就继续动作
如何思考问题,从不同角度思考问题(问题的建模与何种算法适用),哪一种适合用代码来求解,比如自己换换成什么问题,模拟,暴力,DP,贪心,分治
查找与搜索
二分法:特征:1.已排序。2.特定值
模版:
例题:
贪心
一个大问题每一次总是走出当前最优解。总是做出在当前看来最好的选择就可以完成任务。总是考虑最优子问题,像是一棵树自下而上的求解问题
动态规划
一个大问题由许多小问题组成,在求解时总是遇到相同的子问题,所以利用空间换时间,将子问题的解记录下来。需要考虑到所有子问题,确定合适的问题与子问题,构建基于所有子问题的状态转移函数。
1.若何确定问题,若何确定子问题
2.若何构建状态转移函数
3
4
子问题的结构相同(构建状态转移函数,将要求解的问题转换成其它已知子问题),比如青蛙跳台阶,既然子问题结构相同那么可以向极端方向思考,简化成最简单的集中情况来分析试试。