Construct-the-Rectangle
第93天。
今天的题目是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:
The area of the rectangular web page you designed must equal to the given target area.
The width W should not be larger than the length L, which means L >= W.
The difference between length L and width W should be as small as possible.
You need to output the length L and the width W of the web page you designed in sequence.
Example:
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.
Note:
The given area won’t exceed 10,000,000 and is a positive integer
The web page’s width and length you designed must be positive integers.
比较简单的题目,但是题目有点长,总结一下就是,你要求出L
,W
满足一下条件:
- L, W is int
- L*W=Area
- L >= W > 0
- min |L-W|
既然要使得|L-W|
最小,那么显然,L=W=sqrt(Area)
时,L-W
是最小的,但是因为L
和W
限制成整数了,且sqrt(Area)
不一定是整数,如果把它转换成int
的话,L*W
不一定等于Area
了。所以我们必须调整L
和W
的值,简单的调整方法就是,如果L*W < Area
,我们就加大L
之所以是加大L
而不是加大W
的原因是需要满足L >= W
,同理L*W > Area
时,我们就减小W
。这样子我们始终会找到一个L,W
满足上面的条件:
1 | vector<int> constructRectangle(int area) { |
然后dicuss
中的解法更巧妙一点,我们只求W
,然后L = Area/W
:
1 | public int[] constructRectangle(int area) { |