原题链接:leetcode 223. Rectangle Area
【思路】
首先分成两部分: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.