LeetCode 3000: Maximum Area of Longest Diagonal Rectangle (Math / Simulation)
LeetCode 3000Source: https://leetcode.com/problems/maximum-area-of-longest-diagonal-rectangle/
English
For each rectangle [l, w], compare squared diagonal l² + w² to avoid floating point. Keep the rectangle with largest diagonal. If diagonals tie, choose larger area l*w.
class Solution {
public int areaOfMaxDiagonal(int[][] dimensions) {
long bestDiag2 = -1;
int bestArea = 0;
for (int[] d : dimensions) {
int l = d[0], w = d[1];
long diag2 = 1L * l * l + 1L * w * w;
int area = l * w;
if (diag2 > bestDiag2 || (diag2 == bestDiag2 && area > bestArea)) {
bestDiag2 = diag2;
bestArea = area;
}
}
return bestArea;
}
}func areaOfMaxDiagonal(dimensions [][]int) int {
bestDiag2 := int64(-1)
bestArea := 0
for _, d := range dimensions {
l, w := d[0], d[1]
diag2 := int64(l*l + w*w)
area := l * w
if diag2 > bestDiag2 || (diag2 == bestDiag2 && area > bestArea) {
bestDiag2 = diag2
bestArea = area
}
}
return bestArea
}class Solution {
public:
int areaOfMaxDiagonal(vector>& dimensions) {
long long bestDiag2 = -1;
int bestArea = 0;
for (auto& d : dimensions) {
int l = d[0], w = d[1];
long long diag2 = 1LL * l * l + 1LL * w * w;
int area = l * w;
if (diag2 > bestDiag2 || (diag2 == bestDiag2 && area > bestArea)) {
bestDiag2 = diag2;
bestArea = area;
}
}
return bestArea;
}
}; class Solution:
def areaOfMaxDiagonal(self, dimensions: List[List[int]]) -> int:
best_diag2 = -1
best_area = 0
for l, w in dimensions:
diag2 = l * l + w * w
area = l * w
if diag2 > best_diag2 or (diag2 == best_diag2 and area > best_area):
best_diag2 = diag2
best_area = area
return best_areavar areaOfMaxDiagonal = function(dimensions) {
let bestDiag2 = -1;
let bestArea = 0;
for (const [l, w] of dimensions) {
const diag2 = l * l + w * w;
const area = l * w;
if (diag2 > bestDiag2 || (diag2 === bestDiag2 && area > bestArea)) {
bestDiag2 = diag2;
bestArea = area;
}
}
return bestArea;
};中文
对每个矩形 [l, w],用对角线平方 l² + w² 比较,避免浮点误差。优先选对角线更长的;若对角线相同,选面积 l*w 更大的。
class Solution {
public int areaOfMaxDiagonal(int[][] dimensions) {
long bestDiag2 = -1;
int bestArea = 0;
for (int[] d : dimensions) {
int l = d[0], w = d[1];
long diag2 = 1L * l * l + 1L * w * w;
int area = l * w;
if (diag2 > bestDiag2 || (diag2 == bestDiag2 && area > bestArea)) {
bestDiag2 = diag2;
bestArea = area;
}
}
return bestArea;
}
}func areaOfMaxDiagonal(dimensions [][]int) int {
bestDiag2 := int64(-1)
bestArea := 0
for _, d := range dimensions {
l, w := d[0], d[1]
diag2 := int64(l*l + w*w)
area := l * w
if diag2 > bestDiag2 || (diag2 == bestDiag2 && area > bestArea) {
bestDiag2 = diag2
bestArea = area
}
}
return bestArea
}class Solution {
public:
int areaOfMaxDiagonal(vector>& dimensions) {
long long bestDiag2 = -1;
int bestArea = 0;
for (auto& d : dimensions) {
int l = d[0], w = d[1];
long long diag2 = 1LL * l * l + 1LL * w * w;
int area = l * w;
if (diag2 > bestDiag2 || (diag2 == bestDiag2 && area > bestArea)) {
bestDiag2 = diag2;
bestArea = area;
}
}
return bestArea;
}
}; class Solution:
def areaOfMaxDiagonal(self, dimensions: List[List[int]]) -> int:
best_diag2 = -1
best_area = 0
for l, w in dimensions:
diag2 = l * l + w * w
area = l * w
if diag2 > best_diag2 or (diag2 == best_diag2 and area > best_area):
best_diag2 = diag2
best_area = area
return best_areavar areaOfMaxDiagonal = function(dimensions) {
let bestDiag2 = -1;
let bestArea = 0;
for (const [l, w] of dimensions) {
const diag2 = l * l + w * w;
const area = l * w;
if (diag2 > bestDiag2 || (diag2 === bestDiag2 && area > bestArea)) {
bestDiag2 = diag2;
bestArea = area;
}
}
return bestArea;
};
Comments