week23
Week 23 - Leetcode 221 - 230
221 - 最大正方形
这题 是经典的动态规划了,要复习一下 (记住只有最大正方形是动态规划 最大矩形不是)
说着就来回顾一下最大矩形(Leetcode 85. 最大矩形) 的那个题是怎么做的; 按层遍历 + 单调栈
这题就是动态规划了, 动态规划就是见一个记一个hhh
f[i, j]表示以(i, j)为右下角的最大正方形边长
f[i, j] = min(f[i - 1, j], f[i, j - 1], f[i - 1, j - 1]) + 1

代码没什么好说的 主要是这个状态转移方程很难想
222 - 完全二叉树的节点个数
只记得完全二叉树可以用数组模拟了..
完全二叉树 和 满二叉树的区别 别记成一样的就行了
这题居然是二分?!

223 - 矩形面积
平面两个线段[A, B] 和 [C, D]的重合部分:min(B, D) - max(A, C)
请注意这里即不用排序,也不必预先判断不重合的情况(因为不重合相减完是小于0的)
就计算两条边的重叠部分 用两个矩形面积减去重叠部分面积即可;
爆int很烦 -> 改成long long
224 - 基本计算器
这个题纯纯模板题了, 方案是将中缀表达式转化为后缀表达式后求值
↓下面的是终极版计算器 中缀表达式转化为后缀表达式 运算符分优先级 计算
所以对于本题
225 - 用队列实现栈
好没劲这题, 用队列实现栈的意思就是每次取一个元素就要倒腾一圈
226 - 翻转二叉树
先翻转左右儿子 再递归操作就好了
(为什么题目描述还要鞭尸Homebrew的作者)
227 - 基本计算器II
和上一题一样,加上了运算符优先级判断;
228 - 汇总区间
感觉就是题意的简单模拟
229 - 求众数II
先来复习一下 (Leetcode 169. 多数元素)
摩尔投票算法

这里我们简单证明一下为什么摩尔投票法是正确的;
证明的点在于:出现次数大于n / k的数r一定会被选出来
如果想抵消一个
r的话 至多抵消k - 1个其他元素;
所以, 出现次数大于n / k的数r 肯定会被剩下, 这便是摩尔投票法正确性的证明✅
230 - 二叉搜索树中第K小的元素
说到BST中第K小的元素,马上就回顾一下Leetcode.215 数组中的第K个最大元素
215是快速选择算法了
而这个题, 二叉搜索树的中序遍历是有序数组 就跑一遍中序遍历 遍历到第K个数返回就可以了;
很快啊 就复习一下 迭代法的中序遍历(左根右);
前序遍历是加入时处理,中序遍历是弹出时处理
前序遍历
中序遍历
↓本题代码
Last updated