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

avatar

代码没什么好说的 主要是这个状态转移方程很难想

222 - 完全二叉树的节点个数

只记得完全二叉树可以用数组模拟了..

完全二叉树 和 满二叉树的区别 别记成一样的就行了

这题居然是二分?!

avatar

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. 多数元素)

摩尔投票算法

avatar

这里我们简单证明一下为什么摩尔投票法是正确的;

证明的点在于:出现次数大于n / k的数r一定会被选出来

如果想抵消一个r的话 至多抵消k - 1个其他元素;

所以, 出现次数大于n / k的数r 肯定会被剩下, 这便是摩尔投票法正确性的证明✅

230 - 二叉搜索树中第K小的元素

说到BST中第K小的元素,马上就回顾一下Leetcode.215 数组中的第K个最大元素

215是快速选择算法了

而这个题, 二叉搜索树的中序遍历是有序数组 就跑一遍中序遍历 遍历到第K个数返回就可以了;

很快啊 就复习一下 迭代法的中序遍历(左根右);

前序遍历是加入时处理,中序遍历是弹出时处理

前序遍历

中序遍历

↓本题代码

Last updated