英文原文
Given the coordinates of two rectilinear rectangles in a 2D plane, return the total area covered by the two rectangles.
The first rectangle is defined by its bottom-left corner (ax1, ay1)
and its top-right corner (ax2, ay2)
.
The second rectangle is defined by its bottom-left corner (bx1, by1)
and its top-right corner (bx2, by2)
.
Example 1:
Input: ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2 Output: 45
Example 2:
Input: ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2 Output: 16
Constraints:
-104 <= ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 <= 104
中文题目
给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。
每个矩形由其 左下 顶点和 右上 顶点坐标表示:
- 第一个矩形由其左下顶点
(ax1, ay1)
和右上顶点(ax2, ay2)
定义。 - 第二个矩形由其左下顶点
(bx1, by1)
和右上顶点(bx2, by2)
定义。
示例 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
通过代码
高赞题解
容斥原理
首先在给定左下顶点和右上顶点的情况下,计算矩形面积为 $(x2 - x1) * (y2 - y1)$。
因此,起始时我们可以先直接算得给定的两个矩形的面积 $A$ 和 $B$,并进行累加。
剩下的,我们需要求得两矩形的交集面积,利用「容斥原理」,减去交集面积,即是答案。
求交集矩形面积,可以转换为求两矩形在坐标轴上的重合长度,若两矩形在 $X$ 轴上的重合长度为 $x$,在 $Y$ 轴上的重合长度为 $y$,则有重合面积为 $C = x * y$。同时考虑两矩形在任一坐标轴上没有重合长度,则不存在重合面积,因此需要将重合长度与 $0$ 取 $\max$。
最终答案为 $A + B - C$ 。
代码;
class Solution {
public int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
int x = Math.max(0, Math.min(ax2, bx2) - Math.max(ax1, bx1));
int y = Math.max(0, Math.min(ay2, by2) - Math.max(ay1, by1));
return (ax2 - ax1) * (ay2 - ay1) + (bx2 - bx1) * (by2 - by1) - (x * y);
}
}
- 时间复杂度:$O(1)$
- 空间复杂度:$O(1)$
最后
题太简单?不然一起来做一道热乎的 [多解法] 01 背包求方案数(背包专题更新到第 19 篇啦,进入倒计时阶段,快来快来 ~ 🍭🍭🍭
或是加练如下「数学」相关题目:
注:以上目录整理来自 wiki,任何形式的转载引用请保留出处。
最后
如果有帮助到你,请给题解点个赞和收藏,让更多的人看到 ~ (“▔□▔)/
也欢迎你 关注我(公主号后台回复「送书」即可参与长期看题解学算法送实体书活动)或 加入「组队打卡」小群 ,提供写「证明」&「思路」的高质量题解。
所有题解已经加入 刷题指南,欢迎 star 哦 ~
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
42600 | 81164 | 52.5% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|
相似题目
题目 | 难度 |
---|---|
矩形重叠 | 简单 |