LeetCode-492

 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;
    }
}

  

posted @ 2017-03-16 17:02  世人谓我恋长安  阅读(165)  评论(0编辑  收藏  举报