LeetCode223矩形面积

LeetCode223矩形面积

解题思路

首先,我们调整两个矩形,让第一个矩形是靠最左边的;

其次,先考虑没有重叠的情况,有三种情况,如图所示:

  • rectangle1 的下边都大于(等于)rectangle2 的上边,即 B >= H
  • rectangle1 的右边都小于(等于)rectangle2的左边,即 E >= C
  • rectangle1 的上边都小于(等于)rectangle2的下边,即 F >= D

最后, 要考虑重叠的情况,因为一定有重叠,所以可以找到上下左右边界

  • 上边界,取两个矩形的上边界的最小值
  • 下边界,取两个矩形的下边界的最大值
  • 左边界,取两个矩形的左边界的最大值
  • 右边界,取两个矩形的右边界的最小值

\\height = Math.min(C, G) - Math.max(A, E)\\ width = Math.min(D, H) - Math.max(B, F)

得到重叠面积,只需要两个矩形相加减去重叠面积(height * width)即可!

代码实现

class Solution {
    public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        if(A > E){
            return computeAreaCore(E, F, G, H, A, B, C, D);
        }
        return computeAreaCore(A, B, C, D, E, F, G, H);

    }
    public int computeAreaCore(int A, int B, int C, int D, int E, int F, int G, int H) {
        int area1 = (C - A) * (D - B);
        int area2 = (G - E) * (H - F);
        //两个矩形无重合的情况
        if(B >= H || E >= C || D <= F){
            return (area1 + area2);
        }


        int width =  Math.min(C, G) - Math.max(A, E);
        int height = Math.min(D, H) - Math.max(B, F);

        return area1 + area2 - width * height;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_37841366/article/details/109056809