LeetCode算法题-Construct the Rectangle(Java实现)

这是悦乐书的第243次更新,第256篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第110题(顺位题号是492)。对于Web开发人员,了解如何设计网页的大小非常重要。因此,给定一个特定的矩形网页区域,您现在的工作是设计一个矩形网页,其长度L和宽度W满足以下要求:

1.您设计的矩形网页区域必须等于给定的目标区域。

2.宽度W不应大于长度L,这意味着L> = W.

3.长度L和宽度W之间的差异应尽可能小。

您需要按顺序输出您设计的网页的长度L和宽度W.

例:

输入:4

输出:[2,2]

说明:目标区域为4,构建它的所有可能方法是[1,4],[2,2],[4,1]。

但根据要求2,[1,4]是非法的;根据要求3,与[2,2]相比,[4,1]不是最优的。所以长度L是2,宽度W是2。

注意:

  • 给定区域不会超过10,000,000并且是正整数

  • 您设计的网页宽度和长度必须为正整数。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

给的参数area就是面积,要求输出一个二维数组,数组中的元素为长宽,长是第一个元素,宽是第二个元素,并且长宽之差越小越好,那么长宽之差最小的矩形就是正方形了。

先将area进行开方,得到一个整数正根,然后使用area对其取余,如果能够整除,那么就是长,不能就依次自减,最后输出一个长度为2的数组。

public int[] constructRectangle(int area) {
    int sqrt = (int)Math.sqrt(area);
    while (area%sqrt != 0) {
        sqrt--;
    }
    return new int[]{area/sqrt, sqrt};
}

03 第二种解法

我们也可以做乘法,从1开始算起,只要当前宽的平方小于等于面积,就一直算下去,循环内部,我们依旧使用面积对宽取余,能够整除就是长。

public int[] constructRectangle2(int area) {
    int W = 1;
    for (int i=W; i*i <= area; i++) {
        if (area%i == 0) {
            W = i;
        }
    }
    return new int[]{area/W, W};
}

04 小结

算法专题目前已日更超过三个月,算法题文章110+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

原文地址:https://www.cnblogs.com/xiaochuan94/p/10328150.html