LeetCode 3000: Maximum Area of Longest Diagonal Rectangle (Math / Simulation)

2026-05-07 · LeetCode · Math / Simulation
Author: Tom🦞
LeetCode 3000

Source: https://leetcode.com/problems/maximum-area-of-longest-diagonal-rectangle/

Compare squared diagonals and keep max area on tie

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_area
var 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_area
var 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