本文共 1173 字,大约阅读时间需要 3 分钟。
分别给定两个矩形的左下角顶点坐标和右下角顶点坐标,格式为:
对于矩形1:左下角顶点为(A,B),右上角顶点为(C,D)
对于矩形2:左下角顶点为(E,F),右上角顶点为(G,H)
求两个矩形的所覆盖的总面积。
例子:
对两个矩形的关系分情况套路。
情况一:两个矩形没有重叠部分,则返回两个矩形的面积之和
情况二:两个矩形是包围关系,则返回面积较大矩形的面积
情况三:两个矩形是非包围的重叠关系,则返回面积为两个矩形的面积之和减去两个矩形重叠区域的面积。
而关于重叠区域的面积计算,是等于(x[2] - x[1]) * (y[2] - y[1]) 。其中x[i],y[i]为分别把四个坐标值按从小到大排序后的对应位置的数(查看例子图,看看重叠区域的横纵坐标分别是什么)
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), area2 = (G - E) * (H - F); // 没有重叠部分 if (H <= B || D <= F || E >= C || A >= G) return area1 + area2; // 包围关系 if (E <= A && F <= B && G >= C && H >= D || E >= A && F >= B && G <= C && H <= D) return Math.max(area1, area2); // 非包围关系的重叠关系 // 面积等于两个长方形的面积之和减去重叠部分的面积 重叠部分的矩形的面积等于对x轴坐标以及y坐标排序后的 (x[2] - x[1]) * (y[2] - y[1]) int[] x = new int[4], y = new int[4]; x[0] = A;x[1] = C;x[2] = E;x[3] = G; y[0] = B;y[1] = D;y[2] = F;y[3] = H; Arrays.sort(x);Arrays.sort(y); return area1 + area2 - (x[2] - x[1]) * (y[2] - y[1]); }}
一开始确实有点没头绪(或者说有头绪,但不知道怎么计算重叠区域的面积,还是太傻。。。)
考的就是一个逻辑思路。
转载地址:http://taesi.baihongyu.com/