1.遍历一遍,删除链表倒数第N个节点
设置两个相距N的指针,一起移动即可
2.翻转链表
非递归和递归都要会
3.二叉树的层次遍历
需要借助队列,输出层级则带层级信息
4.队列实现栈,栈实现队列
二个可以实现
5.找数组中的最大的前n个数
利用最小堆(二叉树),存储前n个
6.TwoSum问题
使用map存储差值,遍历一遍即可,时间复杂度为O(n)
7.二叉树的层次遍历
队列 + BFS
8.二叉树的层次遍历二
递归+队列
9.二叉树的序列化和反序列化
序列化层次遍历,反序列化注意第一次入队列,队列的操作:size(),offer(),poll()
10.二叉树的前序遍历
使用栈,直接存即可,栈的操作:empty(),pop(),push()
11.二叉树的中序遍历
使用栈,curNode是左子节点
12.二叉树的后序遍历
超级复杂,需要添加preNode的中间变量,代码参考:https://www.jianshu.com/writer#/notebooks/35280545/notes/43332858
13.有序链表合并
一个head和一个next,合并即可
14.二叉树公共祖先
都用递归,注意祖先可以是自己,也可以两个都是自己
15.公共子串
dp问题,动态规划问题,转换成二维数组即可
16.链表交叉
取长度差值,再遍历,遍历3次
17.数组划分
左右相夹,最好先比较,再夹
18.第k大的数
用快速排序哦
https://blog.csdn.net/A__B__C__/article/details/88288590
19.链表排序
归并排序,merge, split,sort递归即可
19.查找旋转数组
递归查找,区分顺序列即可
20.重建二叉树
递归查找,区分顺序列即可
https://blog.csdn.net/u013132035/article/details/80519895
21.矩阵最短路径的和
https://blog.csdn.net/seagal890/article/details/95028066
链接代码有错误,不能取斜的指