力扣题解-数学题类| 矩形面积及判断是否重叠

836. 矩形重叠

矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。

示例 1:
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true
示例 2:
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
输出:false
在这里插入图片描述

提示:
两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出。
矩形中的所有坐标都处于 -10^9 和 10^9 之间。
x 轴默认指向右,y 轴默认指向上。
你可以仅考虑矩形是正放的情况。

/**
* 思路:不重叠的四种情况:x2 <= x3 || x4 <= x1 || y4 <= y1 || y2 <= y3
*/
class Solution {
	//方法一
    // public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
    //     boolean overlay_x = !(rec1[2] <= rec2[0] || rec2[2] <= rec1[0]);
    //     boolean overlay_y = !(rec1[3] <= rec2[1] || rec2[3] <= rec1[1]);
    //     return overlay_x&&overlay_y;
    // }
    //方法二
    public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
        return !(rec1[2] <= rec2[0] || rec2[2] <= rec1[0] || rec1[3] <= rec2[1] || rec2[3] <= rec1[1]);
    }
}

223. 矩形面积

在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
在这里插入图片描述
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。

class Solution {
    public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {

        if(!(C<=E || G<=A || H<=B || D<=F)){//有重叠
            int area1 = (D-B) * (C-A);
            int area2 = (H-F) * (G-E);
            int maxX = Math.min(C, G); //重叠区域的右边界
            int minX = Math.max(A, E); //重叠区域的左边界
            int maxY = Math.min(D, H); //重叠区域的上边界
            int minY = Math.max(B, F); //重叠区域的下边界
            int area3 = (maxX - minX) * (maxY - minY);
            return area1 + area2 - area3;
        }else{//无重叠
            int area1 = (D-B) * (C-A);
            int area2 = (H-F) * (G-E);
            return area1 + area2;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值