Loading

492. [数学运算]构造矩形

492. 构造矩形

直接从\(1\)开始寻找\({L,W}\)的组合,这样的效率其实不高。

// 执行耗时:68 ms,击败了20.65% 的Java用户
// 内存消耗:36.3 MB,击败了54.36% 的Java用户

class Solution {
    public int[] constructRectangle(int area) {
        // L >= W
        // area = L * W
        int L = 1, W = area;
        while(L < W || L * W != area){
            L++;
            W = area / L;
        }
        return new int[] {L, W};
    }
}

下面是优化版:

先计算\(Area\)的平方根,如果可以除尽则直接返回;

从其平方根开始向\(1\)开始遍历是否可以被\(Area\)除尽,可以则直接返回这两个数;

// 执行耗时:0 ms,击败了100.00% 的Java用户
// 内存消耗:36.3 MB,击败了41.37% 的Java用户

class Solution {
    public int[] constructRectangle(int area) {
        int sqrt = (int)Math.sqrt(area);
        if(sqrt * sqrt == area){
            return new int[]{sqrt, sqrt};
        }
        for(int i = sqrt; i >= 1; i --){
            if(area % i == 0){
                return new int[]{area / i, i};
            }
        }
        return null;
    }
}
posted @ 2020-10-24 12:15  上海井盖王  阅读(81)  评论(0)    收藏  举报