题目很简单。给定两个整形数组,长度为4,分别为矩形左下角坐标和右上角坐标,判断是否重合。
示例 1:
输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3] 输出:true
示例 2:
输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1] 输出:false
这里有两种大方向思路:1.考虑重叠的情况 2.考虑不重叠的情况
算法思维差了好多,拿简单题培养思维吧。
我先想到的是考虑重叠的情况。假设矩形1在坐标内,我现在放入矩形2,。那么他的左下角坐标可能存在的区域是1,2,3.这三个区域在考虑右上角坐标。最终形成4种情况。
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
if(rec2[0] <= rec1[0] && rec2[2] > rec1[0]){
if(rec2[1] <= rec1[1] && rec2[3] > rec1[1])
return true;
if(rec2[1] < rec1[3] && rec2[1] > rec1[1]){
return true;
}
}
if(rec2[0] > rec1[0] && rec2[0] < rec1[2]){
if(rec2[1] <= rec1[1] && rec2[3] > rec1[1]){
return true;
}
if(rec2[1] > rec1[1] && rec2[1] < rec1[3]){
return true;
}
}
return false;
}
更好的方法是假设重合了,那么他们在X轴与Y轴的投影也都有重合。即,1和2的X右中较小的值大于1和2中X左较大的值。Y轴同理。贼重合
另外一种考虑不重合的情况。即矩形2在1的上下左右。比如B的X右小于A的X左,那就是在左。简化了比较。