我们给出了一个(轴对齐的)二维矩形列表 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标, (xi1, yi1) 是该矩形 左下角 的坐标, (xi2, yi2) 是该矩形 右上角 的坐标。
计算平面中所有 rectangles 所覆盖的 总面积 。任何被两个或多个矩形覆盖的区域应只计算 一次 。返回 总面积 。因为答案可能太大,返回 10^9 + 7 的 模 。
思路:
我的第一反应是计算所有矩形面积,然后减去两两相交的面积。这种做法是错误的因为每个重叠部分只要减去一次,可能会重复减去。
这道题的正确思路是把整个区域按所有矩形的边界进行划分,然后逐个计算分块的面积。
步骤:
- 把所有矩形的左右边存到一个数组和上下边存到另一个数组,分别将它们去重,然后排序。此时得到的按从左到右和从上到下的排列边界,它们将整个区域划分为了一条条横纵排列的线段,线段组成了一个个小矩形。
- 按左界排序矩阵。这步是为了接下来从左到右扫描做准备。
- 创建一个二维