「每日LeetCode」2021年9月30日

本文最后更新于:2023年3月19日 晚上

Lt223. 矩形面积

223. 矩形面积

给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。
每个矩形由其 左下 顶点和 右上 顶点坐标表示:

  • 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。
  • 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

image.png

示例 1:
输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2 输出:45
示例 2:
输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2 输出:16

提示:

  • -104 <= ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 <= 104

思路

判断两个矩形是否相交。没有相交,返回两个矩形面积之和。如果有相交,用 sort 的方式求出中间的两个点,将面积减去即可。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* @param {number} ax1
* @param {number} ay1
* @param {number} ax2
* @param {number} ay2
* @param {number} bx1
* @param {number} by1
* @param {number} bx2
* @param {number} by2
* @return {number}
*/
var computeArea = function (ax1, ay1, ax2, ay2, bx1, by1, bx2, by2) {
const area1 = (ax1 - ax2) * (ay1 - ay2);
const area2 = (bx1 - bx2) * (by1 - by2);
if (ax1 > bx2 || ay1 > by2 || ax2 < bx1 || ay2 < by1) return area1 + area2;
const [x1, x2, x3, x4] = [ax1, ax2, bx1, bx2].sort((a, b) => a - b);
const [y1, y2, y3, y4] = [ay1, ay2, by1, by2].sort((a, b) => a - b);
const area = (x2 - x3) * (y2 - y3);
return area1 + area2 - area;
};