【LeetCode】223. Rectangle Area 矩形面积(Medium)(JAVA)

【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.

Rectangle Area

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.

题目大意

在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。

每个矩形由其左下顶点和右上顶点坐标表示,如图所示。

解题方法

  1. 求出两个矩阵总的面积 - 两个矩阵重叠的面积
  2. 要求两个矩阵重叠的面积,先判断两个矩阵是否是重叠的,如果不重叠: x 轴不重叠或者 y 轴不重叠。如果 x 轴上两个线段 (a, b) 不重叠,那就是 b 线段的最大值小于等于 a 线段的最小值或者 b 线段的最小值大于等于 b 线段的最大值
  3. 求出重叠的面积: 分别求出 x 轴和 y 轴的重叠部分,然后乘积即可。求出 x 轴上两个线段 a[x1, x2], b[x3, x4] 重叠部分,Math.min(x4, x2) - Math.max(x1, x3)
  4. 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用户

欢迎关注我的公众号,LeetCode 每日一题更新
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值