题目描述
作为一位 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。
算法
(暴力枚举) $O(\sqrt n)$
- W 从 $\sqrt {area}$ 到 1 枚举,若发现 $area % W == 0$,则说明找到了最优的 L 和 W。
时间复杂度
- 最坏情况下,W 可能枚举到 1,故时间复杂度为 $O(\sqrt n)$。
空间复杂度
- 仅需要常数的额外空间。
C++ 代码
class Solution {
public:
vector<int> constructRectangle(int area) {
for (int w = (int)(sqrt(area)); w >= 1; w--)
if (area % w == 0)
return vector<int>{area / w, w};
return vector<int>{area, 1};
}
};