leetCode——836 签到 矩形是否重叠

题目很简单。给定两个整形数组,长度为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左,那就是在左。简化了比较。

猜你喜欢

转载自blog.csdn.net/lfanchenyu/article/details/104957014