每日一题 -- leetCode1725

182 阅读1分钟

image.png 「这是我参与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;
};

总结

无论做什么分析最重要,其中我们分析了题目,分析了解题思路,其实在分析完解题思路后,代码其实就是很简单的事情了,养成习惯,无论做什么之前,都要进行分析,这样有助于你更快更好的完成这件事。