问题来源:https://leetcode.com/problems/rectangle-area/
问题描述: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.
我的代码(18ms):问题简单,注意分类条件即可。
//求两条线的重合部分
int intersection(int left1, int right1, int left2, int right2){
if (right1 <= right2){
if (left1 < left2){
if (right1 > left2){
return right1 - left2;
}
else{
return 0;
}
}
else{
return right1 - left1;
}
}
else{
if (left1 > left2){
if (right2 > left1){
return right2 - left1;
}
else{
return 0;
}
}
else{
return right2 - left2;
}
}
}
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H){
int width_intersection = intersection(A, C, E, G);
int height_intersection = intersection(F, H, B, D);
int all = (C - A)*(D - B) + (G - E)*(H - F);
int in = width_intersection * height_intersection;
return all - in;
}
我的代码(19ms):代码简约 直接求出交叉部分两个顶点
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H){
int nblx = (A > E) ? A : E;
int nbly = (B > F) ? B : F;
int ntrx = (C > G) ? G : C;
int ntry = (D > H) ? H : D;
int uni = 0;
if (ntrx >= nblx && ntry >= nbly) uni = (ntrx - nblx) * (ntry - nbly);
return ((C - A) * (D - B) + (G - E) * (H - F)) - uni;
}