每天写一个小时算法题,难度考研难度,对应力扣中等难度题
贴不贴代码,其实都无所谓,因为leetcode上有很多代码,也有很多讲解。
但是重要的代码,我还是会贴上来的,比如快速排序代码,考试会用到
链表
143. 重排链表 稍微难点,可以利用递归的回溯,在回溯的时候,把尾巴拿去插入,插入节点在每次插入后,进行后移。这种方法比较简洁,但是思想有点难阐述代码。
排序
简单
桶排序(简单)
剑指 Offer 40. 最小的k个数
归并排序 归并排序就是得用额外O(n)空间,但是复杂度是严格N*log(N)的
快速排序 考研的快速排序代码会超时,可以看过的组数,我过了11组,代码是正确的
二叉树
简单题
144. 二叉树的前序遍历
145. 二叉树的后序遍历
226. 翻转二叉树
404. 左叶子之和
中等题
保持两个序列对应实时对应到同一颗子树,然后递归去构建二叉树
105. 从前序与中序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树
层序遍历相关:
637. 二叉树的层平均值
515. 在每个树行中找最大值
二叉搜索树
108. 将有序数组转换为二叉搜索树 有分治的思想
95. 不同的二叉搜索树 II 就递归的选择在区间[L,R]中选择哪个作为根节点,这里递归返回的是子树的根节点,因为不唯一,所以返回vector 代码
分治
稍微难点,这题就是用分治来处理最大字段和
面试题 16.17. 连续数列
动态规划
简单题
62. 不同路径 应该是人人都会的题
63. 不同路径 II 相比上一个题就是直接让某些dp[i][j] 设置成0
64. 最小路径和 苏途同归,稍加修改一下dp转移方程就可以了
中等题
152. 乘积最大子数组
377. 组合总和 Ⅳ 给一个数组,从数组中找有多少个可以组成一个数的不同排列。使用多重背包,但是第一维是容量,第二维才是物品体积。代码