223. Rectangle Area

本文介绍了一种通过坐标运算计算两个矩形在二维平面上重叠部分面积的方法。通过定义矩形的左下角和右上角坐标,利用数学运算找出重叠区域的四个边界,并据此计算出总面积。

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

Find the total area covered by two rectilinear rectangles in a 2D plane.

Each rectangle is defined by its bottom left corner and top right corner as shown in the figure.
这里写图片描述
Rectangle Area
Assume that the total area is never beyond the maximum possible value of int.

s思路:
1. 这道题,就是纯数学题了。通过比较坐标、坐标运算,得到相交的长方形的区间。如下图,画了四种可能的情况,代码的过程不可能去讨论每一种情况,需要知道这些情况表面不一样,但是看我们站在什么角度看了:如果只看到坐标分布不同,相对位置关系不同,那么问题就千变万化;但只要能把相对关系用数学表示出来,比如:两个正方形的左边线的最大值L1,两个正方形的右边线的最小值L4,两个正方形的上边线的最小值L3,两个正方形的下边线的最大值L2,我们根据比较关系,其实就得到了相交长方形的四条边了。现在判断这四条边的关系,如果L1 < L4&&L2 < L3,那就肯定能围成长方形。

这里写图片描述

2.看起来有很多不同的情况,但通过求最大最小值,通过比较大小,所有问题都是一个问题,所有情况就是一种情况,比如:无论如何位置,无论坐标如何,只要相交都有四条边,去计算四条边,然后比较这四条边的相对位置判断是否overlap!

class Solution {
public:
    int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        //
        int l1=max(A,E),l2=max(B,F),l3=min(D,H),l4=min(C,G);
        int two=(C-A)*(D-B)+(G-E)*(H-F);
        int overlap=0;
        if(l1<l4&&l2<l3) overlap=(l4-l1)*(l3-l2);
        return two-overlap;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值