1. 程式人生 > >leetcode題解分析_223. Rectangle Area

leetcode題解分析_223. 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
.這裡寫圖片描述
Assume that the total area is never beyond the maximum possible value of int.

【分析】

簡單題:
注意點就是,判斷語句:
if (E > C || G < A || F > D || H < B)不要用min,max然後相減去判斷,不然可能因為相減得到的暫時結果越界
比如

public class Solution {  
    public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {  
        int area1 = (C-A) * (D-B);  
        int area2 = (G-E) * (H-F);  

        int overlapRegion = overlap(A, B, C, D, E, F, G, H);  
        return area1 + area2 - overlapRegion;  
    }  

    private
int overlap(int A, int B, int C, int D, int E, int F, int G, int H) { int h1 = Math.max(A, E); int h2 = Math.min(C, G); int h = h2 - h1; int v1 = Math.max(B, F); int v2 = Math.min(D, H); int v = v2 - v1; if(h<=0 || v<=0) return
0; else return h*v; } }

其中的h,v就可能越界
所以要這樣寫:

class Solution {
public:
    int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int val = (C-A)*(D-B) + (G-E)*(H-F);
        if (E > C || G < A || F > D || H < B) return val;
        return val-(min(C,G) - max(A,E))*(min(D,H) - max(B,F));
    }
};