1 | 在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。 |
投影
- 从上往下投影(只要grid[i][j]>0就加一)
- 从左往右投影(每一行的最大值的和)
- 从右往左投影(每一列的最大值的和)
1 | class Solution { |
优雅写法
1 | class Solution { |
1 | 在 N * N 的网格中,我们放置了一些与 x,y,z 三轴对齐的 1 * 1 * 1 立方体。 |
1 | class Solution { |
1 | class Solution { |
1 | 在一个由 '0' 和 '1' 组成的二维矩阵内,找到只包含 '1' 的最大正方形,并返回其面积。 |
用 $dp(i, j)$ 表示以 $(i, j)$ 为右下角,且只包含 $1$ 的正方形的边长值。
1 | class Solution { |
1 | 给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。 |
我们用 $dp[i][j]$ 表示以 $(i, j)$ 为右下角的正方形的最大边长,那么除此定义之外,$dp[i][j] = x$ 也表示以 $(i, j)$ 为右下角的正方形的数目为 $x$(即边长为 $1, 2, …, x$ 的正方形各一个)。在计算出所有的 $dp[i][j]$ 后,我们将它们进行累加,就可以得到矩阵中正方形的数目。
1 | class Solution { |
参考文献
1 | 作者:LeetCode-Solution |
1 | 给你一个只包含 0 和 1 的 rows * columns 矩阵 mat , |
1 | class Solution { |
1 | class Solution { |
难度中等
给你一个正整数数组 nums
,请你移除 最短 子数组(可以为 空),使得剩余元素的 和 能被 p
整除。 不允许 将整个数组都移除。
请你返回你需要移除的最短子数组的长度,如果无法满足题目要求,返回 -1
。
子数组 定义为原数组中连续的一组元素。
示例 1:
1 | 输入:nums = [3,1,4,2], p = 6 |
示例 2:
1 | 输入:nums = [6,3,5,2], p = 9 |
示例 3:
1 | 输入:nums = [1,2,3], p = 3 |
示例 4:
1 | 输入:nums = [1,2,3], p = 7 |
示例 5:
1 | 输入:nums = [1000000000,1000000000,1000000000], p = 3 |
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 109
1 <= p <= 109
同余定理:数论中的重要概念。给定一个正整数m,如果两个整数 $a$ 和 $b$ 满足$a-b$ 能够被m整除,即 $(a-b)/m$ 得到一个整数,那么就称整数 $a$ 与 $b$ 对模 $m$ 同余,记作 $a≡b(mod\quad m)$ 。对模 $m$ 同余是整数的一个等价关系。
反身性:$a≡a (mod\quad m)$;
对称性:若$a≡b(mod\quad m)$,则$b≡a (mod\quad m)$;
传递性:若$a≡b(mod\quad m)$,$b≡c(mod\quad m)$,则$a≡c(mod\quad m)$;
同余式相加:若$a≡b(mod\quad m)$,$c≡d(mod\quad m)$,则$a c≡b d(mod\quad m)$;
同余式相乘:若$a≡b(mod\quad m)$,$c≡d(mod\quad m)$,则$ac≡bd(mod\quad m)$。
1 | 两数a, b 对 p 同余, 则 (a - b) % p = 0. |
1 | class Solution { |
1 | 给你一个二进制矩阵 matrix ,它的大小为 m x n ,你可以将 matrix 中的 列 按任意顺序重新排列。 |
预处理数组,计算以这个点为结尾,上面有多少个连续的1,就是这一列以这个点为结尾的最大高度
这样就将二维问题转成一维
遍历每一行,对每一行进行排序,记录矩形的最长的高度,每次更新结果
1 | class Solution { |
参考文献
作者:rational-irrationality来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 | 在一个 XY 坐标系中有一些点,我们用数组 coordinates 来分别记录它们的坐标,其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。 |
使用向量判断多点是否共线。
求坐标为$(x_1,y_1)$,$(x_2,y_2)$两点的向量的公式为$\vec{a}=(x_2-x_1,y_2-y_1)$,
判断两点是否共线的公式
$x_1y_2=x_2y1$
证明:
如果$\vec{a}≠0$,那么向量$\vec{b}$与$\vec{a}$共线的充要条件是:存在唯一实数$λ$,使得$\vec{b}=λ\vec{a}$。
若$\vec{a}$与$\vec{b}$共线,$\vec{b}$与$\vec{c}$共线,则$\vec{b}=λ_1 \vec{a}$,$\vec{c}=λ_2\vec{b}$,则$\vec{c}=λ_1 *λ_2 *\vec{a}$.即$\vec{a}$与$\vec{c}$也是共线的。
为了高效判断是否两两共线,可以通过中间点判断来减少时间复杂度,即如果存在三个点$p_1,p_2,p_3$,如果$p_1$与$p_2$共线并且$p_2$与$p_3$是共线的,那么$p_1$与$p_3$也是共线的。
因为题目中不包含重复的点,因此通过两两判断向量是否满足 $x_1y_2=x_2y1$,就可以判断所有的点是否共线
1 | class Solution{ |
1 | 给你一个由 不同 正整数组成的数组 nums ,请你返回满足 a * b = c * d 的元组 (a, b, c, d) 的数量。 |
1 | class Solution { |
题目要求计算数组中 ab == cd的四元组,实际上可以看做求数组中两个数的积是否会在数组中重复出现。
也就是可以想到用map来判断是否会重复出现,重复出现的次数用key来记录。
因为是四元组相同的元素会有8种不同的组合,所以最终结果是重复出现次数*8;
1 | class Solution { |
参考文献
作者:mai-dong-cao来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 |
|
1、先计算每个矩形中可以形成的最大正方形的边长
2、记录最大的正方形边长
3、判断每个矩形是否可以生成最大边长的正方形
1 | class Solution { |
1 | 给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。 |
1 | class Solution { |
1 | class Solution { |
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true