跳转至

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 之间。

题解

public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
    //左下角取最大
    int x1 = rec1[0], y1 = rec1[1],x2 = rec1[2], y2 = rec1[3];
    if (rec1[0] < rec2[0]) {
        x1 = rec2[0];
    }
    if(rec1[1] < rec2[1]){
        y1 = rec2[1];
    }
    //右上角取最小
    if (rec1[0] > rec2[0] ) {
        x2 = rec2[2];
    }
    if(rec1[3] > rec2[3]){
        y2 = rec2[3];
    }
    return  y2 > y1 && x2 > x1;
}

代码简化

1
2
3
4
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
    return Math.min(rec1[3], rec2[3]) > Math.min(rec1[1], rec2[1])
            && Math.min(rec1[2], rec2[2]) > Math.max(rec1[0], rec2[0]);
}