Every day a leetcode
题目来源:492. 构造矩形
解法1:数学
我们可以初始化 l = ⌊sqrt(area)⌋,不断循环判断area 能否被 l 整除,如果可以则跳出循环,否则将l++后继续循环。
循环结束后我们就找到了答案,长为max(l, area / l),宽为min(l, area / l)。
代码:
/*
* @lc app=leetcode.cn id=492 lang=cpp
*
* [492] 构造矩形
*/
// @lc code=start
class Solution
{
public:
vector<int> constructRectangle(int area)
{
vector<int> ans;
int l = sqrt(area);
while (area % l != 0)
l++;
ans.push_back(max(l, area / l));
ans.push_back(min(l, area / l));
return ans;
}
};
// @lc code=end
结果:

复杂度分析:
时间复杂度:O(sqrt(area))。当area为质数时为最坏情况。
空间复杂度:O(1)。
该问题通过初始化长边长度为面积的平方根,然后检查是否能整除面积。若不能,则增加长边长度并继续检查,直到找到能整除的长边。最后,长边和宽边分别是最大和最小的两个因子,返回这两个值。时间复杂度是O(sqrt(area)),空间复杂度是O(1)。
259

被折叠的 条评论
为什么被折叠?



