Skip to content

Commit ef141f2

Browse files
committed
chore: update 3000. Maximum Area of Longest Diagonal Rectangle
1 parent ac6bc0a commit ef141f2

2 files changed

Lines changed: 123 additions & 0 deletions

File tree

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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+
49+
## Solution
50+
```js
51+
/**
52+
* @param {number[][]} dimensions
53+
* @return {number}
54+
*/
55+
56+
var areaOfMaxDiagonal = function (dimensions) {
57+
let maxRectangleDiagonal = 0;
58+
let maxRectangleArea = 0;
59+
60+
for (let i = 0; i < dimensions.length; i++) {
61+
const length = dimensions[i][0];
62+
const width = dimensions[i][1];
63+
const diagonal = length * length + width * width;
64+
if (diagonal > maxRectangleDiagonal) {
65+
maxRectangleDiagonal = diagonal;
66+
maxRectangleArea = length * width;
67+
}
68+
if (diagonal === maxRectangleDiagonal) {
69+
maxRectangleArea = Math.max(length * width, maxRectangleArea);
70+
}
71+
}
72+
73+
return maxRectangleArea;
74+
};
75+
```
76+
</TabItem>
77+
</Tabs>
78+
79+
## 解題思路
80+
題目描述提到 `dimensions[i][0]` 會是矩形的長,然後 `dimensions[i][1]` 則是矩形的寬,需要return 對角線最長的矩形的面積。如果有多個對角線最長的矩形,則傳回面積最大的矩形的面積( 因為 `dimensions[i].length == 2` 所以只要回傳兩個中較大的那個就好)。而矩形對角線則可以透過畢氏定理算出。
81+
82+
以題目給的 Example 1 `dimensions = [[9,3],[8,6]]` 為例子,
83+
84+
第一個矩形長9寬3
85+
- 對角線 X:$9^2$ + $3^2$ = $X^2$ , 所以 X = $\sqrt{90}$
86+
- 面積:9 * 3 = 27
87+
88+
第二個矩形長8寬6
89+
- 對角線 X:$8^2$ + $6^2$ = $X^2$ , 所以 X = $\sqrt{100}$
90+
- 面積:8 * 6 = 48
91+
92+
因為 $\sqrt{100}$ > $\sqrt{90}$,所以要回傳的是第一個矩形的面積 `48`
93+
94+
把邏輯寫成程式就是答案了!需要注意的是可能不只兩組矩形,所以需要遍歷陣列。
95+
96+
## 心得
97+
順便學到了怎麼用 markdown 寫數學運算符號,好耶!
98+
- `$平方^2$` : $平方^2$
99+
- `$\sqrt{根號}$` : $\sqrt{根號}$
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* @param {number[][]} dimensions
3+
* @return {number}
4+
*/
5+
6+
var areaOfMaxDiagonal = function (dimensions) {
7+
let maxRectangleDiagonal = 0;
8+
let maxRectangleArea = 0;
9+
10+
for (let i = 0; i < dimensions.length; i++) {
11+
const length = dimensions[i][0];
12+
const width = dimensions[i][1];
13+
const diagonal = length * length + width * width;
14+
if (diagonal > maxRectangleDiagonal) {
15+
maxRectangleDiagonal = diagonal;
16+
maxRectangleArea = length * width;
17+
}
18+
if (diagonal === maxRectangleDiagonal) {
19+
maxRectangleArea = Math.max(length * width, maxRectangleArea);
20+
}
21+
}
22+
23+
return maxRectangleArea;
24+
};

0 commit comments

Comments
 (0)