模拟:
模拟:将要求分为一类一类的操作再让电脑去完成
1. 多项式输出
2. 机器翻译:阅读文章时查找词典问题(替换采用FIFO),类似于计算机外存与内存的缺页与替换
第一思路:设置大小为n的数组作为内存,设置计数器对数组大小区域决定替换哪个
- 解法1:设置单词标记数组vis,vis的值不等于0时为进入时间并同时做标记,int position记录最早的元素位置
- 可能存在的问题:单词号是非负整数,可能是0
- 解法2:设置长数组,内存数组在长数组上逐渐移动,查找时从最后往前寻找n个长度(内存范围)即可;用flag判断是否存在,若存在continue;若不存在内存数组延长数组往后移动一个元素,新进入长数组的元素视为调入内存中的元素
- 可能存在的问题:程序开始内存无单词时,查找应该从数组第一位开始而非(长数组最后一位-内存长度)开始
- 解法3:将flag换成标记数组
- 可能存在的问题:注意内存中单词大于容量的时候才开始替换
枚举:
一一列举,不重不漏
- 优化枚举的基本思路:减少枚举次数
1. 选择合适的枚举对象
2. 选择合适的枚举方向---方便排除非法和不是最优的情况
3. 选择合适的数据维护方法---转化问题
1. 铺地毯
第一思路:最终要求的点已经提前给出,所以只需看最后是哪张地毯覆盖过这个点即可
- 解法:遍历记录最后覆盖这个点的地毯;但可以尝试直接逆向寻找第一个覆盖这个点的地毯
2. 最大正方形
第一思路:遍历每一个#号作为正方形的左上顶点,再往后遍历找到另一个#号作为正方形的另一个顶点;两个定点确定之后正方形的四个顶点便都确认了,判断剩余的两个点是否存在即可
- 解法:确定左上顶点与右上顶点,再通过找出正方形中心与全等三角形等几何方式推断坐标
3. 回文日期
第一思路:先用双指针判断是否是回文数,再通过翻转年份判断月、日是否存在;遍历日期的时候只需要遍历年份即可,月日是年份翻转来的而不用以天为单位遍历
4. 同学的成绩
第一思路:把同学成绩排序,询问时遍历
- 解法:建立一分一段表,累计求和算名次
5. 数列求和问题(问题4延伸)
引入前缀和概念,把对区间的查询改为对区间端点的查询
6. 数列修改问题
引入差分数组概念,修正数据使用