flag
软件学院大三党,每日一道算法题,第21天
题目描述
矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。
如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。
给出两个矩形,判断它们是否重叠并返回结果。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rectangle-overlap
思路
这道题很坑啊,想成立的情况非常难,情况非常复杂,但是想不成立的情况就很简单了:
①rec1左横坐标比rec2右横坐标还大
②rec1下纵坐标比rec2上纵坐标还大
③rec1右横坐标比rec2左横坐标还小
④rec1上纵坐标比rec2下纵坐标还小
代码
public static boolean isRectangleOverlap(int[] rec1, int[] rec2) {
/**
* 左下角(rec[0],rec[1])
* 右下角(rec[2],rec[1])
* 左上角(rec[0],rec[3])
* 右上角(rec[2],rec[3])
*/
if (rec1[0] >= rec2[2])//rec1左横坐标比rec2右横坐标还大
return false;
if (rec1[1] >= rec2[3])//rec1下纵坐标比rec2上纵坐标还大
return false;
if (rec1[2] <= rec2[0])//rec1右横坐标比rec2左横坐标还小
return false;
if (rec1[3] <= rec2[1])//rec1上纵坐标比rec2下纵坐标还小
return false;
return true;
}