剑指offer
3 最优解法空间复杂度为O(1),注意要充分利用题中数的范围特征
4 对于查找数的题,不要只会想到二分,有的查找题并不适合二分法查找,
5 字符串题目,很简单,直接暴力查找即可
6 链表简单题,学会用递归和栈两种方法
7 由中序和前序构造二叉树,关键是要先观察出两个数据的结构,再不断缩小区间,将区间设置成左闭右开,当左端点等于右端点是返回None,
9 这个题很巧妙,一个栈负责进元素,一个栈负责出元素,当负责出栈的没有元素时,就去负责进栈的去取,如果都为空返回-1,这样就实现了队列的从堆尾进元素和从队首出元素的功能,
10 利用动态规划最快,要学会左右同时赋值的写法,
解法同上一道题,仍是斐波那契数列,只不过初值不同而已
11 解释一下题意:在一个单调不减的数组中,截取左边的任意一段放到右边合成一个新的数组,注意截取的这段可以是0,
这个题是有重复数的旋转数组问题,注意还有完全是单增数组的情况(因为他是取左边的一段放到右边,可以选择不放,所以有单增的情况),不要忽略,关键是要找到正确的缩小搜索区间的条件,这需要全面的分类讨论,不可遗漏任何一种情况,
12典型的回溯法,关键是要对遍历过的位置进行记录,遍历完后再恢复,因为有可能还要走,可以用数组记录也可以用矩阵01进行记录,
27 这个题的关键是要理解节点对象的地址作用,只要将某个节点的左右节点地址互换,其左右子树就会调换
28 关键是要观察出判断完对称的a b节点后,要判断a.left与b.right以及a.right与b.left,利用这个才能写递归解法,要学会return recur(L.left, R.right) and recur(L.right, R.left)
这个写法,非常重要,如果用队列的话最好是用双端队列实现,方便从左右同时进同时出,
57 主要是熟悉等差数列的求和公式,以及如何求首项和末项,及项数,
59 通过维护一个单调的双端队列(这里很巧妙),实现了时间和空间复杂度都是O(1)