链接:

https://leetcode.com/problems/rectangle-area/

大意:

分别给定两个矩形的左下角顶点坐标和右下角顶点坐标,格式为:

对于矩形1:左下角顶点为(A,B),右上角顶点为(C,D)

对于矩形2:左下角顶点为(E,F),右上角顶点为(G,H)

求两个矩形的所覆盖的总面积。

例子:

leetcode----223. Rectangle Area

思路:

对两个矩形的关系分情况套路。

情况一:两个矩形没有重叠部分,则返回两个矩形的面积之和

情况二:两个矩形是包围关系,则返回面积较大矩形的面积

情况三:两个矩形是非包围的重叠关系,则返回面积为两个矩形的面积之和减去两个矩形重叠区域的面积。

而关于重叠区域的面积计算,是等于(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]);
    }
}

结果:

leetcode----223. Rectangle Area

结论:

一开始确实有点没头绪(或者说有头绪,但不知道怎么计算重叠区域的面积,还是太傻。。。)

考的就是一个逻辑思路。 

 

 

相关文章:

  • 2022-01-09
  • 2021-03-30
  • 2021-07-20
  • 2021-10-20
  • 2021-06-20
猜你喜欢
  • 2021-11-13
  • 2021-12-22
  • 2021-09-23
  • 2021-11-27
  • 2022-01-09
  • 2021-08-17
  • 2021-12-29
相关资源
相似解决方案