数组部分刚开始算法的练习主要内容还是day2学到的滑动窗口解决思路和双指针解决思路
链表部分涉及到要掌握的算法实际上主要是虚拟头结点的构建和双指针的操作,有了数组的基础实际上很好理解双指针的思路
哈希表中无非涉及三种类型的情况:1.遇到字母组成的哈希问题,我们可以考虑使用char[]数组来解决,2.set做哈希表,这种情况下我们一般要判断这个数值是否存在,3.map做哈希表,这种情况下我们不仅要判断是否存在,还要返回对应下标。
字符串中的双指针问题实际上和前面的双指针思路相似,不多总结,而还有一部分则是涉及KMP算法问题,我们在本次刷题中只做个理解。
栈与队列实际上并没有过多难题,主要就是在于理解题意会使用栈和队列即可。
二叉树题目本质上无非是递归法和迭代法,大多数题目用递归法解决,这也要求我们在做题的过程中先考虑好递归的几个要素,其次是二叉树做题时我们要判断题目应该使用哪一种遍历方式。
回溯算法大部分可以通过我们所知的回溯三部曲来解决,同时区分组合、排列等问题,需要去重的可以用used数组去重,部分题目可以通过剪枝来提高效率。
贪心无套路,所以对于贪心算法的问题我们并没有过多算法上的思路可以提供,大部分贪心是通过做题的经验来得出答案。
动态规划是这阶段学习时间最长的一部分,除了前半部分学习的背包问题和完全背包我们,在后面我们还学习了处理组合数和排列数的情况,我们需要明确的是:如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。
单调栈并不是特别难考虑,所以我们只需要根据题目选择是单调增还是单调减,并套用不同的模板即可