0223. 矩形面积【中等】
1. 📝 题目描述
给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。
每个矩形由其 左下 顶点和 右上 顶点坐标表示:
- 第一个矩形由其左下顶点
(ax1, ay1)和右上顶点(ax2, ay2)定义。 - 第二个矩形由其左下顶点
(bx1, by1)和右上顶点(bx2, by2)定义。
示例 1:

txt
输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
输出:451
2
2
示例 2:
txt
输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
输出:161
2
2
提示:
-10^4 <= ax1 <= ax2 <= 10^4-10^4 <= ay1 <= ay2 <= 10^4-10^4 <= bx1 <= bx2 <= 10^4-10^4 <= by1 <= by2 <= 10^4
2. 🎯 s.1 - 数学
c
int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
int area1 = (ax2 - ax1) * (ay2 - ay1);
int area2 = (bx2 - bx1) * (by2 - by1);
int overlapW = fmax(0, fmin(ax2, bx2) - fmax(ax1, bx1));
int overlapH = fmax(0, fmin(ay2, by2) - fmax(ay1, by1));
return area1 + area2 - overlapW * overlapH;
}1
2
3
4
5
6
7
2
3
4
5
6
7
js
/**
* @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 = (ax2 - ax1) * (ay2 - ay1)
const area2 = (bx2 - bx1) * (by2 - by1)
const overlapW = Math.max(0, Math.min(ax2, bx2) - Math.max(ax1, bx1))
const overlapH = Math.max(0, Math.min(ay2, by2) - Math.max(ay1, by1))
return area1 + area2 - overlapW * overlapH
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
py
class Solution:
def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:
area1 = (ax2 - ax1) * (ay2 - ay1)
area2 = (bx2 - bx1) * (by2 - by1)
overlap_w = max(0, min(ax2, bx2) - max(ax1, bx1))
overlap_h = max(0, min(ay2, by2) - max(ay1, by1))
return area1 + area2 - overlap_w * overlap_h1
2
3
4
5
6
7
2
3
4
5
6
7
- 时间复杂度:
- 空间复杂度:
算法思路:
- 总面积 = 矩形1面积 + 矩形2面积 - 重叠面积
- 重叠宽度 =
- 重叠高度 =