leetcode----223. Rectangle Area

该博客介绍了LeetCode上的223题,即如何计算两个矩形的覆盖总面积。根据矩形的坐标,分别分析了三种情况:无重叠、包围和非包围重叠,并给出了计算重叠区域面积的公式。通过逻辑分析,解决这个问题的关键在于正确判断矩形间的关系并计算重叠部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

链接:

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

大意:

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

对于矩形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]);
    }
}

结果:

结论:

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

考的就是一个逻辑思路。 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值