题目
思路
很简单的模拟法,我们需要避免一些重复的运算,所以循环遍历到sqrt(area)即可。另外设置一个delt1与delt来记录每次length与width之间的差,选取最小的那个,总是就很简单啦。。
AC代码
class Solution {
public:
vector<int> constructRectangle(int area) {
vector<int> res;
int delt1=0x7fffffff;//整型的最大值 7后面7个f挺好记的
for(int i=1;i<=(int) sqrt(area) +1;++i){
int width=i,length=area/i;
int delt=abs(length-width);//目前的差距
if(width*length==area){
if(delt1>delt){//如果比当前的delt大
res.clear();
res.push_back(length);
res.push_back(width);
delt1=delt;
}
}
}
return res;
}
};
后记
某人记得看