「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」
前言
每日一题,轻松解题
每日一题为刷题系列 每日刷一题LeetCode题,并且对题目进行分析,分享思路。
正文
:可以形成最大正方形的矩形数量
难度:简单
题目要求:
给你一个数组 rectangles ,其中 rectangles[i] = [li, wi] 表示第 i 个矩形的长度为 li 、宽度为 wi 。
如果存在 k 同时满足 k <= li 和 k <= wi ,就可以将第 i 个矩形切成边长为 k 的正方形。例如,矩形 [4,6] 可以切成边长最大为 4 的正方形。
设 maxLen 为可以从矩形数组 rectangles 切分得到的 最大正方形 的边长。
请你统计有多少个矩形能够切出边长为 **maxLen 的正方形,并返回矩形 数目
分析题目:
有一个数组里面每一项存放的都是一个矩形的长和宽,每个矩形都能切出一个最大边长的正方形,获取最大正方形的数量。
举个例子
输入: arr = [[5,8],[3,9],[5,12],[16,5]]
输出: 3
共有四个矩形,能切出的正方形边长分别是5、3、5、5,所以最大正方形为3个,输出3
:解题
理清思路:
这道题非常的简单,应该理解完题目就有思路了,不过我们还是照样来分析一下,养成这个习惯。
条件
- 已知共有几个矩形
- 已知每个矩形的长宽 结论
- 可以得到每个矩形可切的正方形大小(就是矩形的宽)
- 判断最大的正方形有几个
编辑代码:
1.首先定义一个函数,设置两个变量,一个存放数量,一个存放当前最大边长
function maxRectanglesCount (a,b,c) {
let res = 0
let maxLen = 0
};
2.遍历数组,判断矩形的宽,再判断是否为最大正方形
for (const rectangle of rectangles) {
const l = rectangle[0];
const w = rectangle[1];
const k = Math.min(l, w);
if (k === maxLen) {
++res;
} else if (k > maxLen) {
res = 1;
maxLen = k;
}
}
- l 和 w为宽高,使用Math.min获取其中小的值为宽,也就是正方形的边长,存放在k
- 判断,当k等于maxLen时,就说明两个边长一样,res结果就加一,如果k大于当前最大边长maxLen,就重新计算res结果数量,并且maxLen的值变成当前的k值
3.函数返回最终结果
function maxRectanglesCount(rectangles) {
let res = 0,
maxLen = 0;
for (const rectangle of rectangles) {
const l = rectangle[0],
w = rectangle[1];
const k = Math.min(l, w);
if (k === maxLen) {
++res;
} else if (k > maxLen) {
res = 1;
maxLen = k;
}
}
return res;
};
总结
无论做什么分析最重要,其中我们分析了题目,分析了解题思路,其实在分析完解题思路后,代码其实就是很简单的事情了,养成习惯,无论做什么之前,都要进行分析,这样有助于你更快更好的完成这件事。