天天看點

《leetCode》: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.

《leetCode》:Rectangle Area

Rectangle Area

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

思路

此題比較簡單,當兩個矩形有交集時,則結果就是兩個矩形的面積減去兩個矩形的交集。如果兩個矩形沒有交集,則就是兩個矩形的面積之和。 判斷有無交集隻需要判斷四種情況(在上面、下面、左邊、右邊;其中包括了在左上方呀右上方呀左下方呀右下方)即可。

int max(int a,int b){
    return a>b?a:b;
}
int min(int a,int b){
    return a<b?a:b;
}
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
    if(C<A||D<B||G<E||H<F){//矩形有效性檢查 
        return ;
    } 
    int twoRectArea=(C-A)*(D-B)+(G-E)*(H-F);
    int x0=max(A,E);
    int y0=max(B,F);
    int x1=min(C,G);
    int y1=min(D,H);
    int intersectArea=(x1-x0)*(y1-y0);  
    if(C<=E||D<=F||G<=A||H<=B){//沒有交集 
        return  twoRectArea;
    }   
    else{
        return twoRectArea-intersectArea; 
    }

}