41、判断回文
牛客 141 判断是否为回文字符串:
思路:
- 前后指针相向而行
42、单链表的排序
牛客70 单链表的排序:
思路:
- 1、快慢指针找中点,拆成两个链表,合并
- 2、堆排序
43、数组中出现次数超过一半的数字
牛客 73 数组中出现次数超过一半的数字:
思路:
- 排序取中位数
- 哈希表存数值到个数的映射
- 投票法。假设某个数是众数,则票数+1,遇到非嫌疑众数的数,票数-1,当票数为0则说明当前数不是众数
44、平衡二叉树
力扣110/牛客 62 判断是否为平衡二叉树:
- https://leetcode.cn/problems/balanced-binary-tree/description/
- https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=117
思路:
- dfs,判断左子树为平衡树,判断右子树为平衡树,左子树深度和右子树深度差距小于等于1为平衡树
O(n)解法:
O(n2)解法:
45、矩阵的最小路径和
力扣 64/牛客 59 矩阵最小路径和:
- https://leetcode.cn/problems/minimum-path-sum/description/
- https://www.nowcoder.com/practice/7d21b6be4c6b429bb92d219341c4f8bb?tpId=117
思路:
- 动态规划:dp[i][j] = dp[i][j] + Min(matrix[i][j-1],matrix[i-1][j])
- dfs,要求空间复杂度为O(n),则说明不能再新建 dp 矩阵,直接使用matrix
46、表达式求值
牛客 137 表达式求值:
思路:
- 栈+递归
47、逆波兰表达式求值
牛客 216 逆波兰表达式求值:
思路:
- 栈。遇到数字入栈,遇见符号弹出两个数字做运算,然后将结果入栈
48、最小的K个数
牛客 119 最小的K个数:
思路:
- topk 问题求最小,建大顶堆
自建大顶堆的代码:
使用JDK优先级队列的代码:
49、字符串出现次数的TopK问题
牛客97 字符串出现次数的TopK问题:
思路:
- 最大堆实现的优先级队列
50、进制转换
牛客 112 进制转换:
思路:
- 除N取余,然后倒序排列,高位补零。
51、判断一个链表是否为回文结构
牛客 96 判断一个链表是否为回文结构
思路:
- 找到中间节点,反转后半部分,两部分从头等值比对
52、二叉树中和为某一值的路径(是否存在)
牛客 9 二叉树中和为某一值的路径(一):
思路:
- 前序遍历,每走过一个节点更新 sum 值,sum 为0 且是叶子节点更新路径和标识,并退出
53、二叉树中和为某一值的路径(所有路径)
牛客 8 二叉树中和为某一值的路径(二)::
思路:
- 回溯的思路,在(一)的遍历基础上增加路径更新、结果追加、撤销选择的逻辑。
54、二叉树中和为某一值的路径(所有子路径)
牛客 162 二叉树中和为某一值的路径(三):
思路:
- 在(二)的基础上,再次进行树的遍历统计路径数
- 注意:路径不再要求叶子节点结束
55、链表内指定区间反转
力扣 92 反转链表2:
牛客21 链表内指定区间反转:
56、不同路径的数目
力扣 63/牛客 34 不同路径的数目:
- https://leetcode.cn/problems/unique-paths/description/
- https://www.nowcoder.com/practice/166eaff8439d4cd898e3ba933fbc6358?tpId=117
思路:
- dp 迭代 or 递归
57、合并区间
力扣 56/牛客 37 合并区间:
- https://leetcode.cn/problems/merge-intervals/description/
- https://www.nowcoder.com/practice/69f4e5b7ad284a478777cb2a17fb5e6a?tpId=117
思路:
- 对于几个相交区间合并后的结果区间 x,x.start 一定是这些相交区间中 start 最小的,x.end 一定是这些相交区间中 end 最大的
- 对 start 排序
58、排序数组中找到上中位数
牛客 36 在两个长度相等的排序数组中找到上中位数:
思路:
- 双指针
59、搜索二叉树和完全二叉树
牛客 60 判断一棵二叉树是否为搜索二叉树和完全二叉树
思路:
- 搜索二叉树,明确定义是 root为左子树的最大值,右子树的最小值,遍历参数引入双节点
- 完全二叉树,每一层不存在空节点。层序遍历,null值也入队。遍历遇到空节点,检查队列是否还有非空节点,存在说明二叉树不完全。
60、删除有序链表中重复的元素-II
牛客 24 删除有序链表中重复的元素-II
思路:
- 双指针,隔一齐头并进,出现重复则只前进快指针,直到不相等的时候执行删除操作

