在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45
说明: 假设矩形面积不会超出 int 的范围。
解题思路:
计算方法为矩形1的面积+矩形2的面积-两个矩形共同的覆盖面积。
public static int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
long area = (long) (C - A) * (D - B) + (long)(G - E) * (H - F);
// Math.min(C, G) 表示右边边的最小的边
// Math.max(A, E) 表示左边边的最大的边
// 下面的减法会产生数组越介,要扩大数据范围
long width = Math.max((long)Math.min(C, G) - (long)Math.max(A, E), 0);
// Math.min(D, H) 表示顶边边的最小的边
// Math.max(B, F) 表示底边边的最大的边
long height = Math.max((long)Math.min(D, H) - (long)Math.max(B, F), 0);
System.out.println(width +":" + height + "=" + width*height);
return (int)(area - width * height);
}