223. 矩形面积

LeetCode - 223. 矩形面积


题目描述

难度:中等

给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。

每个矩形由其 左下 顶点和 右上 顶点坐标表示:

第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。
第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

示例 1:
在这里插入图片描述

输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4,
	 bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
输出:45

示例 2:

输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, 
	 bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
输出:16

提示:

-104 <= ax1, ay1, ax2, ay2, bx1, by1, bx2, by2 <= 104

题解分析

仔细读题,题目要求计算并返回两个矩形覆盖的总面积;也就是说当两个矩形的面积计算出来后,存在两种情况:

① 矩形不存在重叠情况,这种情况直接返回两个矩形面积之和 ;
② 矩形存在覆盖情况,需要考虑利用总面积减去被覆盖的面积;

理解清楚两种条件之后,可以分析一下示例 1 中的矩形图片,我们应该如何考虑不重叠的情况呢?

假设存在两个矩形,第一个矩形为 a ,第二个矩形为 b;
a 对应左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2),b 对应左下顶点 (bx1, by1) 和右上顶点 (bx2, by2);

可以思考,当存在矩形 a 的左边界 ax1 >= 矩形 b 的右边界 bx2 时,两个矩形不会重叠;当存在矩形 a 的右边界 ax2 <= 矩形 b 的左边界 bx1 时,两个矩形也不会重叠;
剩下的上边界和下边界也是如此,可以尝试独自分析一下;

第二种情况,存在重叠,此时看示例 1 的图片,对于位于重叠部分的矩形,其边界取的是 a 和 b 两个矩形中 左边界的最大值,右边界的最小值,上边界的最小值,下边界的最大值
不妨带入其它重叠情况下重叠部分的矩形是否像这样取边界;带入后会发现,只要发生重叠,重叠部分矩形边界必然符合上述条件;

两种情况均分析理解后,就可结合条件解题;

解题代码

 public int computeArea(int ax1, int ay1, int ax2, int ay2, int bx1, int by1, int bx2, int by2) {
        int total = (ax2 - ax1) * (ay2 - ay1) +   // 总面积计算
                (bx2 - bx1) * (by2 - by1);
        
        if(ax1 >= bx2 || ax2 <= bx1 || 
                ay1 >= by2 || ay2 <= by1){     // 矩阵不重合
            
            return total;
            
        }else {    // 矩阵重合 
            return total - 
                    ( (Math.min(ax2,bx2) - Math.max(ax1,bx1)) * 
                            (Math.min(ay2,by2) - Math.max(ay1,by1)) );  
        } // 重叠部分矩形面积计算  右减左= 边长 * 高 =上减下  
    }

总结

最开始只知道求全部面积减去重叠面积,而重叠与不重叠的条件以及重叠部分的面积怎么计算始终想不出来,最后看了题解后才恍然大悟,还是得多刷题,题做少了,思想就混了。



岁月悠悠,衰微只及肌肤;热忱抛却,颓废必致灵魂

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值