刷算法有一段时间了,最近每个工作日早上刷半个小时到一个小时,持续一个月多了,加起来有二十几个小时了,从开始的每道题都必须看题解到现在已经可以磕磕绊绊的做出一些中等难度的题了。虽然时间和空间复杂度还不能完全保证,但是也是很大的进步了,继续,兄弟!
一些心得:
- 实在写不出不要硬憋,先看官方题解的思a路,再试一次,还不行就找js题解代码再试一次,因为有很多套路和通用理论概念你是不知道的。
- 做出来也要看题解和优秀解析,把改进点写下来,然后写上注释。
- 分类做题,同类型先做几天再做其他的。
- 后面再有想法在总结吧……
一些方法
- 二分法:
- 回溯:说白了就是当前步骤有多种情况,你先放进去一种情况,然后用递归继续执行,然后下面把它返回上一步的情况,再换一种情况尝试。
- 贪心算法:一般用来解决,最多取多少钱、最多灌溉面积有多大、最多可以xxxx等问题,本质上就是每一步都选择当前步骤中最优势的条件,然后继续下一步(需要注意的是,当前步骤一般会有条件,你取到最优条件后记得把其他的条件处理掉)
- 双指针: 这个概念其实有点炫酷了,双索引更合适我觉得,作用就是遍历数组时用两个索引,这样可以减少循环次数。 也分为快慢、收尾两种。而且还有变种的,比如快排中寻找位置的过程,有人说是快慢,~~但是我觉得算是真假指针 ~~这里看到某大佬文章,说为读写指针,这个是很有道理的,前面读后面写。反正就是数组中碰到一个数组内部求和、取俩值计算、有序数组处理之类的都可以先试着指一哈。
- DFS(深度优先搜索):小岛问题、等
一些数据结构
树:适合遍历,好多题都可以抽象成树然后递归,比如回溯的一些题,二叉树的前中后序遍历要搞通透。
栈:后入先出的概念,有很多有意思的用法,目前认为他可以解决消消乐类型的题。比如判断括号,判断路径是否正确等。
链表:有序的表,重点是打断后可以重连,目前接触到的比较重要的就是双指针的方法解题,接触还不深。
一些概念
前序:根左右 中序:左根右 后序: 左右根
