• 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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

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

  • 相关阅读:
    nginx+upsync+consul 构建动态nginx配置系统
    服务容错保护断路器Hystrix之六:缓存功能的使用
    consul之:ACL配置使用
    Consul之:服务健康监测
    Consul实践指导-DNS接口
    Spring 整合Mybatis实例
    ORACLE SEQUENCE 具体解释
    python高速排序
    降阶法计算行列式方法有个地方有Bug(原文也已更正,此为更正后部分)
    MyBatis在Oracle中插入数据并返回主键的问题解决
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/10328150.html
Copyright © 2020-2023  润新知