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:
1. The area of the rectangular web page you designed must equal to the given target area. 2. The width W should not be larger than the length L, which means L >= W. 3. 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.
想法如下
- 因為第二個限制條件,可以知道 W <= sqrt(area),不然的話,L就會小於W
- 從 W = sqrt(area) 往下找,找到可以將 area 整除的 W 就是答案了
C++
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public: | |
vector<int> constructRectangle(int area) { | |
vector<int> ans(2); | |
//>> width's upperbound in sqrt(area) | |
int width = static_cast<int>(sqrt((float)area)); | |
//>> find length | |
while(area % width != 0) { | |
--width; | |
} | |
ans[0] = area/width; | |
ans[1] = width; | |
return ans; | |
} | |
}; |
Java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Solution { | |
public int[] constructRectangle(int area) { | |
int width = (int) Math.sqrt(area); | |
while(area % width != 0) { | |
--width; | |
} | |
return new int[] {area/width, width}; | |
} | |
} |
沒有留言:
張貼留言