Skip to content

Commit 28254bc

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

2 files changed

Lines changed: 122 additions & 0 deletions

File tree

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
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{根號}$
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)