加载中...
223-矩形面积(Rectangle Area)
发表于:2021-12-03 | 分类: 中等
字数统计: 1.4k | 阅读时长: 5分钟 | 阅读量:

原文链接: https://leetcode-cn.com/problems/rectangle-area

英文原文

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:

Rectangle Area
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:

Rectangle Area
输入: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 篇啦,进入倒计时阶段,快来快来 ~ 🍭🍭🍭

或是加练如下「数学」相关题目:

题目 题解 难度 推荐指数
6. Z 字形变换 LeetCode 题解链接 中等 🤩🤩🤩
7. 整数反转 LeetCode 题解链接 简单 🤩🤩🤩
9. 回文数 LeetCode 题解链接 简单 🤩🤩🤩🤩
29. 两数相除 LeetCode 题解链接 中等 🤩🤩🤩
31. 下一个排列 LeetCode 题解链接 中等 🤩🤩🤩
42. 接雨水 LeetCode 题解链接 困难 🤩🤩
43. 字符串相乘 LeetCode 题解链接 中等 🤩🤩🤩🤩
149. 直线上最多的点数 LeetCode 题解链接 困难 🤩🤩🤩
223. 矩形面积 LeetCode 题解链接 中等 🤩🤩🤩🤩
231. 2 的幂 LeetCode 题解链接 简单 🤩🤩🤩
233. 数字 1 的个数 LeetCode 题解链接 困难 🤩🤩🤩🤩
263. 丑数 LeetCode 题解链接 简单 🤩🤩
313. 超级丑数 LeetCode 题解链接 中等 🤩🤩🤩
326. 3的幂 LeetCode 题解链接 简单 🤩🤩🤩
342. 4的幂 LeetCode 题解链接 简单 🤩🤩🤩
446. 等差数列划分 II - 子序列 LeetCode 题解链接 困难 🤩🤩🤩🤩🤩
470. 用 Rand7() 实现 Rand10() LeetCode 题解链接 中等 🤩🤩🤩🤩
477. 汉明距离总和 LeetCode 题解链接 简单 🤩🤩🤩
483. 最小好进制 LeetCode 题解链接 困难 🤩🤩🤩🤩
523. 连续的子数组和 LeetCode 题解链接 中等 🤩🤩🤩🤩
552. 学生出勤记录 II LeetCode 题解链接 困难 🤩🤩🤩🤩
633. 平方数之和 LeetCode 题解链接 简单 🤩🤩
645. 错误的集合 LeetCode 题解链接 简单 🤩🤩🤩
650. 只有两个键的键盘 LeetCode 题解链接 中等 🤩🤩🤩🤩
789. 逃脱阻碍者 LeetCode 题解链接 中等 🤩🤩🤩🤩🤩
810. 黑板异或游戏 LeetCode 题解链接 困难 🤩🤩🤩🤩
879. 盈利计划 LeetCode 题解链接 困难 🤩🤩🤩🤩🤩
1006. 笨阶乘 LeetCode 题解链接 中等 🤩🤩🤩
1104. 二叉树寻路 LeetCode 题解链接 中等 🤩🤩🤩
1137. 第 N 个泰波那契数 LeetCode 题解链接 简单 🤩🤩🤩🤩
1310. 子数组异或查询 LeetCode 题解链接 中等 🤩🤩🤩🤩
1442. 形成两个异或相等数组的三元组数目 LeetCode 题解链接 中等 🤩🤩🤩
1049. 最后一块石头的重量 II LeetCode 题解链接 中等 🤩🤩🤩🤩
1486. 数组异或操作 LeetCode 题解链接 简单 🤩🤩🤩
1588. 所有奇数长度子数组的和 LeetCode 题解链接 简单 🤩🤩🤩🤩
1720. 解码异或后的数组 LeetCode 题解链接 简单 🤩🤩🤩
1734. 解码异或后的排列 LeetCode 题解链接 中等 🤩🤩🤩🤩
1738. 找出第 K 大的异或坐标值 LeetCode 题解链接 中等 🤩🤩🤩
面试题 10.02. 变位词组 LeetCode 题解链接 中等 🤩🤩🤩🤩

注:以上目录整理来自 wiki,任何形式的转载引用请保留出处。


最后

如果有帮助到你,请给题解点个赞和收藏,让更多的人看到 ~ (“▔□▔)/

也欢迎你 关注我(公主号后台回复「送书」即可参与长期看题解学算法送实体书活动)或 加入「组队打卡」小群 ,提供写「证明」&「思路」的高质量题解。

所有题解已经加入 刷题指南,欢迎 star 哦 ~

统计信息

通过次数 提交次数 AC比率
42600 81164 52.5%

提交历史

提交时间 提交结果 执行时间 内存消耗 语言

相似题目

题目 难度
矩形重叠 简单
上一篇:
222-完全二叉树的节点个数(Count Complete Tree Nodes)
下一篇:
224-基本计算器(Basic Calculator)
本文目录
本文目录