一、题目描述
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
二、题解
方法一:判断是否重叠
想法
- 先判断矩阵1 和矩阵 2 是否重叠。
- 如果不重叠,则返回量矩阵面积之和。
- 如果重叠,则先求出重叠面积,返回总面积减去重叠面积。
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int len1 = C - A;
int wid1 = D - B;
int area1 = len1 * wid1;
int len2 = G - E;
int wid2 = H - F;
int area2 = len2 * wid2;
boolean notOverlapped = G <= A || C <= E || H <= B || D <= F;
if (notOverlapped) {
return area1 + area2;
}
int x1 = Math.max(A, E); //确定右边界
int x2 = Math.min(C, G); //确定左边界
int y1 = Math.min(D, H); //确定下边界
int y2 = Math.max(B, F); //确定上边界
int olArea = (x2-x1) * (y1-y2);
return area1 + area2 - olArea;
}
复杂度分析
- 时间复杂度: O ( 1 ) O(1) O(1),
- 空间复杂度: O ( 1 ) O(1) O(1),