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;
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值