给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。

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

  • 第一个矩形由其左下顶点 (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
Related Topics
  • 几何
  • 数学

  • 👍 135
  • 👎 0
  • class Solution {
        public int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
            int cx1 = Math.max(ax1,bx1);
            int cy1 = Math.max(ay1,by1);
            int cx2 = Math.min(ax2,bx2);
            int cy2 = Math.min(ay2,by2);
            int overlappingArea = 0;
            if (cx1 < cx2 && cy1 < cy2){
                overlappingArea = areaOf( cx1, cy1, cx2, cy2);
            }
    
            return areaOf( ax1, ay1, ax2, ay2) + areaOf( bx1, by1, bx2, by2) - overlappingArea;
    
        }
    
        public int areaOf(int x1, int y1, int x2, int y2){
            return ( x2 - x1 ) * ( y2 - y1);
        }
    }

    本题题面中有一个重要的信息
    每个矩形由其 左下 顶点和 右上 顶点坐标表示

    所以我们需要找出重叠部分对应的左下角和右上角。
    由图中可见,C1和C2点相应的关系也就可以基本明晰了
    而特殊情况下,如果两个矩形没有重叠部分,则求出来的C1不能保证在C2点的左下方