leetcode 223. Rectangle Area | Java 最短代码实现

【思路】

首先分成两部分:1. 没有交集(结果为两矩形面积之和)2. 有交集(结果为两矩形面积之和再减去公共部分)

第一种情况简单

第二种情况分为四种情况,交集分别位于矩形 ABCD 的左上角、左下角、右上角、右下角。如果一种一种考虑,代码量会很大,但是仔细观察发现实际上只要确定了左下角的 x和 y 左边,右上角的 x 和 y 左标就可以确定交集的面积:

    public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        int s = (C - A) * (D - B) + (G - E) * (H - F);
        if (C <= E || F >= D || B >= H || A >= G)
            return s;
        int topX = Math.min(G, C);
        int topY = Math.min(H, D);
        int bottomX = Math.max(E, A);
        int bottomY = Math.max(B, F);
        return s - (topX - bottomX) * (topY - bottomY);
    }
3081 / 3081  test cases passed. Runtime: 4 ms  Your runtime beats 65.22% of javasubmissions.

你可能感兴趣的:(leetcode 223. Rectangle Area | Java 最短代码实现)