知识点
LeetCode算法题
LeetCode算法题
复习
543.【二叉树的直径】
113.【路径总和 II】
解题思路:
回溯算法
99.【恢复二叉搜索树】
解题思路:
根据二叉搜索树中序遍历的递增性质解题。
95.【不同的二叉搜索树 II】
687.【最长同值路径】
学习
54.【螺旋矩阵】
解题思路:
首先,想到是否可以使用dfs来做题,结果是不行的。
因此,该题目应该思考如何模拟该过程,结果发现,一开始遍历方向是向右方的,如果碰到了界限或者遍历过的元素,则转向然后遍历。因此,关键就是转向和判断是否出界或者碰到遍历过的元素。
41.【缺失的第一个正数】
解题思路:
首先,描述题目:长度为len的int数组,没排序,找最小的正整数。
正整数,就是从1开始往后计数。因此,如果长度为len的int数组中存储了[1, len]的全部数字,则最小的正整数,肯定是len + 1;如果长度为len的int数组中没有全部存储[1, len]的数字,则最小正整数肯定是里面缺失的最小的数字。
如果不规定空间复杂度,直接用哈希表,结合上述的查找思路,即可解题。
如果不规定时间复杂度,我们可以先排序数组,然后用二分查找解题。
但是规定了空间复杂度为O(1)且时间复杂度为O(n),因此,我们要用到原地哈希的技巧。
首先,哈希表其实本身也是一个数组,通过对元素的不同哈希函数确定元素在数组上的位置。
因此,对于该题目,如果我们定义一个哈希函数,保证元素1对应数组索引0,元素2对应索引1,...,即元素i映射到数组索引i+1上即可。
我们定义好哈希函数后,遍历数组,运用哈希函数让数组中正整数都回到应该在的位置。
然后我们遍历一次数组,如果都正确则返回len + 1;如果出现第一个错误位置,则返回i + 1