为了避免思路遗漏给解题照成困难,总结一下思路:
大体有3个:看转化
1.直接模拟法:也就是问题自己处理自己,不需要转化.直接按问题跑一边即可.
2.转化到其他数据结构和运算来进行处理:绝大部分题目都这么想.要实现什么功能,用什么数据结构来实现这个功能,是否能转化到已经处理过的成型套路解法:
(只要简化后,让问题变得更直白简单一点就可以)
辅助数组,辅助矩阵
单调栈,双端队列维护滑动窗口最大值(左神的2个法宝)
索引堆,堆,队列,双端队列,红黑树,字典,
3.递归,转化到跟自身相似的子问题.需要最优子结构:
●动态规划和贪心法.(需要结合使用,半贪心半动态规划才是最好用的,考虑动态规划时候不要忘了尝试是否能用贪心来加速)
●遇到动态规划问题解决不清楚,也就是得不到最优子结构时候,考虑加描述加条件来细化分解得到更高维的动态规划.(牛牛跳跃问题,合并回文子串问题)