|
| 1 | +--- |
| 2 | +title: 3000. Maximum Area of Longest Diagonal Rectangle |
| 3 | +description: You are given a 2D 0-indexed integer array dimensions. |
| 4 | +keywords: [LeetCode, 3000. Maximum Area of Longest Diagonal Rectangle,Easy,Array] |
| 5 | +--- |
| 6 | + |
| 7 | +# [{frontMatter.title}](https://leetcode.com/problems/maximum-area-of-longest-diagonal-rectangle) |
| 8 | + |
| 9 | +:::danger Easy |
| 10 | +::: |
| 11 | + |
| 12 | +import Tabs from "@theme/Tabs"; |
| 13 | +import TabItem from "@theme/TabItem"; |
| 14 | + |
| 15 | +<Tabs> |
| 16 | + <TabItem value="description" label="題目描述" default> |
| 17 | + |
| 18 | +## Description |
| 19 | + |
| 20 | +You are given a 2D **0-indexed** integer array dimensions. |
| 21 | + |
| 22 | +For all indices `i`, `0 <= i < dimensions.length, dimensions[i][0]` represents the length and `dimensions[i][1]` represents the width of the rectangle `i`. |
| 23 | + |
| 24 | +Return the **area** of the rectangle having the **longest** diagonal. If there are multiple rectangles with the longest diagonal, return the area of the rectangle having the **maximum** area. |
| 25 | + |
| 26 | +#### Example 1: |
| 27 | + |
| 28 | +>**Input:** dimensions = [[9,3],[8,6]] |
| 29 | +**Output:** 48 |
| 30 | +**Explanation:** |
| 31 | +For index = 0, length = 9 and width = 3. Diagonal length = sqrt(9 * 9 + 3 * 3) = sqrt(90) ≈ 9.487. |
| 32 | +For index = 1, length = 8 and width = 6. Diagonal length = sqrt(8 * 8 + 6 * 6) = sqrt(100) = 10. |
| 33 | +So, the rectangle at index 1 has a greater diagonal length therefore we return area = 8 * 6 = 48. |
| 34 | + |
| 35 | +#### Example 2: |
| 36 | + |
| 37 | +>**Input:** dimensions = [[3,4],[4,3]] |
| 38 | +**Output:** 12 |
| 39 | +**Explanation:** Length of diagonal is the same for both which is 5, so maximum area = 12. |
| 40 | + |
| 41 | +## Constraints: |
| 42 | +- `1 <= dimensions.length <= 100` |
| 43 | +- `dimensions[i].length == 2` |
| 44 | +- `1 <= dimensions[i][0], dimensions[i][1] <= 100` |
| 45 | + |
| 46 | + </TabItem> |
| 47 | + <TabItem value="solution" label="解答"> |
| 48 | + ## Solution |
| 49 | +```js |
| 50 | +/** |
| 51 | + * @param {number[][]} dimensions |
| 52 | + * @return {number} |
| 53 | + */ |
| 54 | + |
| 55 | +var areaOfMaxDiagonal = function (dimensions) { |
| 56 | + let maxRectangleDiagonal = 0; |
| 57 | + let maxRectangleArea = 0; |
| 58 | + |
| 59 | + for (let i = 0; i < dimensions.length; i++) { |
| 60 | + const length = dimensions[i][0]; |
| 61 | + const width = dimensions[i][1]; |
| 62 | + const diagonal = length * length + width * width; |
| 63 | + if (diagonal > maxRectangleDiagonal) { |
| 64 | + maxRectangleDiagonal = diagonal; |
| 65 | + maxRectangleArea = length * width; |
| 66 | + } |
| 67 | + if (diagonal === maxRectangleDiagonal) { |
| 68 | + maxRectangleArea = Math.max(length * width, maxRectangleArea); |
| 69 | + } |
| 70 | + } |
| 71 | + |
| 72 | + return maxRectangleArea; |
| 73 | +}; |
| 74 | +``` |
| 75 | + </TabItem> |
| 76 | +</Tabs> |
| 77 | + |
| 78 | +## 解題思路 |
| 79 | +題目描述提到 `dimensions[i][0]` 會是矩形的長,然後 `dimensions[i][1]` 則是矩形的寬,需要return 對角線最長的矩形的面積。如果有多個對角線最長的矩形,則傳回面積最大的矩形的面積( 因為 `dimensions[i].length == 2` 所以只要回傳兩個中較大的那個就好)。而矩形對角線則可以透過畢氏定理算出。 |
| 80 | + |
| 81 | +以題目給的 Example 1 `dimensions = [[9,3],[8,6]]` 為例子, |
| 82 | + |
| 83 | +第一個矩形長9寬3 |
| 84 | + - 對角線 X:$9^2$ + $3^2$ = $X^2$ , 所以 X = $\sqrt{90}$ |
| 85 | + - 面積:9 * 3 = 27 |
| 86 | + |
| 87 | +第二個矩形長8寬6 |
| 88 | + - 對角線 X:$8^2$ + $6^2$ = $X^2$ , 所以 X = $\sqrt{100}$ |
| 89 | + - 面積:8 * 6 = 48 |
| 90 | + |
| 91 | +因為 $\sqrt{100}$ > $\sqrt{90}$,所以要回傳的是第一個矩形的面積 `48`。 |
| 92 | + |
| 93 | +把邏輯寫成程式就是答案了!需要注意的是可能不只兩組矩形,所以需要遍歷陣列。 |
| 94 | + |
| 95 | +## 心得 |
| 96 | +順便學到了怎麼用 markdown 寫數學運算符號,好耶! |
| 97 | +- `$平方^2$` : $平方^2$ |
| 98 | +- `$\sqrt{根號}$` : $\sqrt{根號}$ |
0 commit comments