【矩形面积】

题目来源:https://leetcode.cn/problems/rectangle-area/

目录


矩形面积

题目介绍

给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其 左下 顶点和 右上 顶点坐标表示:

  • 第一个矩形由其左下顶点 (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
解释: 最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例1:

输入: ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
输出: 16

思路:
这是一道偏数学几何的编程题,题目给定两个矩形,要求返回覆盖总面积,所以需要考虑以下几种情况:

  1. 两个矩形相交,总覆盖面积=矩形1+矩形2-重叠面积
    在这里插入图片描述
  2. 两个矩形相交,总覆盖面积=矩形1+矩形2
    在这里插入图片描述
  3. 大矩形包含小矩形,总覆盖面积=max(矩形1, 矩形2)
    在这里插入图片描述

可以发现,有三种情况,有三个公式,所以说每次都需要判断三种情况然后进行计算。这样似乎有点麻烦,其实仔细观察不难发现这三个公司其实可以合并,第二种情况重叠面积为0,所以可以和第一种情况合并,第三种情况重叠面积就是小矩形,所以得出总覆盖面积=大矩形+小矩形-小矩形,还是可以和第一种情况合并,最终得出公式为总覆盖面积=矩形1+矩形2-重叠面积
接下来我们需要把核心放在求重叠面积上。对于第二种情况,我们可以先判断两个矩形是否重叠,这要如何判断呢?不重叠有以下四种情况
1.
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述
4.
在这里插入图片描述

根据上面四个判断就能判断两个矩形是否重叠,如果不重叠,就需要计算重叠矩形面积了,先观察下图:
在这里插入图片描述
通过上图方式可以推导出重叠矩形的左下顶点和右上顶点,这要就可以计算出矩形面积(这个很简单,不用细说了)
根据上面一些推导再结合覆盖面积计算公式即可求出最终答案
代码实现:

class Solution {
public:
    int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
        int area1 = (ay2-ay1)*(ax2-ax1), area2 = (by2-by1)*(bx2-bx1);
        // 判断是否无重叠
        if (bx1 >= ax2 || bx2 <= ax1 || by1 >= ay2 || by2 <= ay1) {
            return area1 + area2;
        }
        int overlappingarea = (min(ax2, bx2)- max(ax1, bx1))*(min(ay2, by2)-max(ay1, by1));
        return area1-overlappingarea+area2;
    }
};
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆呆兽学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值