【LeetCode】223. Rectangle Area 矩形面积(Medium)(JAVA)
题目地址: https://leetcode.com/problems/rectangle-area/
题目描述:
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.
Example:
Input: A = -3, B = 0, C = 3, D = 4, E = 0, F = -1, G = 9, H = 2
Output: 45
Note:
- Assume that the total area is never beyond the maximum possible value of int.
题目大意
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
解题方法
- 求出两个矩阵总的面积 - 两个矩阵重叠的面积
- 要求两个矩阵重叠的面积,先判断两个矩阵是否是重叠的,如果不重叠: x 轴不重叠或者 y 轴不重叠。如果 x 轴上两个线段 (a, b) 不重叠,那就是 b 线段的最大值小于等于 a 线段的最小值或者 b 线段的最小值大于等于 b 线段的最大值
- 求出重叠的面积: 分别求出 x 轴和 y 轴的重叠部分,然后乘积即可。求出 x 轴上两个线段 a[x1, x2], b[x3, x4] 重叠部分,Math.min(x4, x2) - Math.max(x1, x3)
- note: 这道题拆解成以为的就很简单,可以自己在纸上画图理解下
class Solution {
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
int total = (D - B) * (C - A) + (H - F) * (G - E);
if (E >= C || A >= G || F >= D || B >= H) return total;
return total - (Math.min(G, C) - Math.max(A, E)) * (Math.min(H, D) - Math.max(B, F));
}
}
执行耗时:3 ms,击败了99.17% 的Java用户
内存消耗:37.9 MB,击败了74.54% 的Java用户