Leetcode - Rectangle Area

Question

Find the total area covered by two rectilinear rectangles in a 2D plane.

Each rectangle is defined by its bottom left corner and top right corner as shown in the figure.

这里写图片描述

Assume that the total area is never beyond the maximum possible value of int.


Java Code

public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
    //先假设两个矩形之间有重叠
    //重叠区域的左下角点的横/纵坐标取两个矩形左下角点的横/纵坐标之中的较大值
    int I = A > E ? A : E;
    int J = B > F ? B : F;
    //重叠区域的右上角点的横/纵坐标取两个矩形右上角点的横/纵坐标之中的较小值
    int K = C < G ? C : G;
    int L = D < H ? D : H;

    int overlap = 0;
    //如果两个矩形有重叠区域即左下角(I,J)位于右上角(K,L)的左下方,则可计算出重叠面积
    if(I < K && J < L)
        overlap = (K - I) * (L - J);

    //两个矩形的并集区域面积等于两者面积之和减去交集区域(重叠区域)的面积
    return (C - A) * (D - B) + (G - E) * (H - F) - overlap;
}

说明

  • 本题关键的问题有两点,第一是,求两者的并集区域面积最好用间接法,这一点比较容易想到;第二是,如何用统一的方式处理两个矩形各种可能的有重叠/无重叠的情况。如果我们通过他们各自的两个角点的坐标来分情况讨论,代码会显得非常繁琐而且有可能出现遗漏。我们可以通过在坐标系中分析这两个矩形的位置关系,先将其分为有重叠和无重叠两大类情况,有重叠则需要计算其重叠区域面积。

  • 本题的重点在于判断两个矩形是否有交集,有交集时两者相交于各自的哪个角,或者是一个矩形完全包含另一个矩形。由于矩形在的二维平面上有x和y两个变量,我们可以先简化一下,只看x变量,也就是先找两个矩形的宽所在的边在x轴上的投影的交集,求两条线段之间的交集我们就比较好处理了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值