LeetCode-492

本文介绍了一种用于设计网页尺寸的算法,确保所设计的长宽符合特定条件:面积匹配目标值、长度不小于宽度且两者差距最小。提供了两种Java实现方案,一种是从面积递减寻找合适的因子,另一种则通过根号求解提升效率。
摘要由CSDN通过智能技术生成

 Construct the Rectangle

For a web developer, it is very important to know how to design a web page's size. So, given a specific rectangular web page’s area, your job by now is to design a rectangular web page, whose length L and width W satisfy the following requirements:

1. The area of the rectangular web page you designed must equal to the given target area.

2. The width W should not be larger than the length L, which means L >= W.
3. The difference between length L and width W should be as small as possible.
Input: 4
Output: [2, 2]
Explanation: The target area is 4, and all the possible ways to construct it are [1,4], [2,2], [4,1]. 
But according to requirement 2, [1,4] is illegal; according to requirement 3,  [4,1] is not optimal compared to [2,2].
So the length L is 2, and the width W is 2.
第一种解法也是我第一时间想到的解法:让area依次除area到sqrt(area),找到其中乘数相差最小的。
java代码:
public class Solution {
    public int[] constructRectangle(int area) {
        int[] arr=new int[]{area,1};
		if(area<=0){
			arr[0]=0;
			arr[1]=0;
			return arr;
		}
        for(int i=area;i>=Math.sqrt(area);i--){
            if(area%i==0){
            	if(i>=area/i&&(i-area)<(arr[0]-arr[1])){
            		arr[0]=i;
            		arr[1]=area/i;
            	}
            }
        }
    
        return arr;
    }
}

  下面介绍一种效率更高的方法,那就是area除以一个比sqrt(area)小一点点的数,如果商为零,那么就是乘数相差最小的,也是长大于宽的。

public class Solution {
    public int[] constructRectangle(int area) {
        int[] result = new int[2];
        if(area == 0){
            return result;
        }
        int a = (int)Math.sqrt(area);
        while(area%a != 0){
            a--;
        }
        int b = area/a;
        result[0] = b;
        result[1] = a;
        return result;
    }
}

  

转载于:https://www.cnblogs.com/lcbg/p/6560446.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值