LeetCode
计算两个矩形融合之后的面积。(非原题描述)
本体思路不是最优的,利用了之前的两个矩形重叠判断的思路。
该思路也可以用来求解矩形重叠部分的面积。
融合后面积 = 两个矩形的总面积 - 重叠部分面积
重叠部分的面积 = x方向投影的交集长度 * y方向投影的交集长度
在投影交集计算时,即计算[a,b]与[c,d]的交集的长度。
手下令[a,b]域永远是左侧起点那个集合。如果不是,进行交换。
class Solution { public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int l1,l2; l1 = intersectionLen(A,C,E,G); l2 = intersectionLen(B,D,F,H); int lap = l1*l2; long ans = (D-B)*(C-A) + (H-F)*(G-E) - lap; return (int)ans; } private int intersectionLen(int a,int b,int c,int d) { if(a==b || c==d){ return 0; } if(a>c) { int tmp = a; a=c; c = tmp; tmp = b; b=d; d = tmp; } // 情况1 if(d>b) return b > c ? b-c : 0; else //情况2,B域在A域内部 return d-c; } }