首页 > 试题广场 >

矩形重叠

[编程题]矩形重叠
  • 热度指数:842 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定两个矩形,分别以四个数字 [x1,y1,x2,y2] 表示,其中 (x1,y1) 表示矩形左下角,(x2,y2) 表示矩形右上角,矩形的上下边平行于 x 轴,左右边平行于 y 轴。
如果两个矩形相交的面积为正,则两矩形重叠。如果重叠则输出 true ,否则输出 false

数据范围:矩形的四个角坐标满足
示例1

输入

[0,0,2,2],[2,2,4,4]

输出

false
示例2

输入

[0,0,2,2],[1,1,3,3]

输出

true
package main
//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param r1 int整型一维数组 
 * @param r2 int整型一维数组 
 * @return bool布尔型
*/
func overlapRec( r1 []int ,  r2 []int ) bool {
    if r1[2]<=r2[0]||r1[0]>=r2[2]||r1[3]<=r2[1]||r1[1]>=r2[3]{
        return false
    }
    return true
}

发表于 2023-03-14 00:26:52 回复(0)
写个最一般的情况
class Solution {
public:
    bool overlapRec(vector<int>& r1, vector<int>& r2) {
        double half_h_1 = (r1[3] - r1[1]) / 2;
        double half_x_1 = (r1[2] - r1[0]) / 2;
        double half_h_2 = (r2[3] - r2[1]) / 2;
        double half_x_2 = (r2[2] - r2[0]) / 2;
        double dis_x = abs(r2[2] + r2[0] - r1[2] - r1[0]) / 2;
        double dis_h = abs(r2[3] + r2[1] - r1[3] - r1[1]) / 2;
        if (dis_h < half_h_1 + half_h_2
                && dis_x < half_x_1 + half_x_2) {
            return true;
        } else {
            return false;
        }
    }
};


发表于 2023-05-13 18:19:54 回复(0)
# -*- coding: utf-8 -*-


#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param r1 int整型一维数组
# @param r2 int整型一维数组
# @return bool布尔型
#
class Solution:
    """
    题目:
        https://www.nowcoder.com/practice/53acad54f18444a9b714acd75115d817?tpId=196&tqId=40505&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D8%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196&difficulty=undefined&judgeStatus=undefined&tags=&title=
    算法:
        判断矩形是否重叠,我们根据矩形位置,分为左右两个矩形;对于左右矩形是否重叠,实际上就是判断左矩形的右下角和右矩形的左上角是否重叠,或者左矩形的右上角与右矩形的左下角是否重叠
    复杂度:
        时间复杂度:O(1)
        空间复杂度:O(1)
    """

    def overlapRec(self, r1, r2):
        # write code here
        if r1[0] > r2[0]:
            r1, r2 = r2, r1

        # print r1, r2

        RU1 = (r1[2], r1[3]) # r1的右上角
        RD1 = (r1[2], r1[1]) # r1的右下角

        LU2 = (r2[0], r2[3]) # r2的左上角
        LD2 = (r2[0], r2[1]) # r2的左下角

        return RU1[0] > LD2[0] and RU1[1] < LD2[1]&nbs***bsp;\
               RD1[0] > LU2[0] and RD1[1] < LU2[1]



if __name__ == "__main__":
    sol = Solution()

    # r1, r2 = [0, 0, 2, 2], [2, 2, 4, 4]

    # r1, r2 = [0, 0, 2, 2], [1, 1, 3, 3]

    r1, r2 = [2, -14, 14, -10], [0, 5, 3, 11]

    res = sol.overlapRec(r1, r2)

    print res

发表于 2022-06-27 12:31:02 回复(0)
class Solution:
    def overlapRec(self , r1: List[int], r2: List[int]) -> bool:
        # write code here
        x1,y1,x2,y2 = r1
        x3,y3,x4,y4 = r2
        # 上方/下方
        if y3 >= y2&nbs***bsp;y4 <= y1:
            return False
        # 左边/右边
        elif x4 <= x1&nbs***bsp;x3 >= x2:
            return False
        return True

发表于 2022-04-24 11:18:41 回复(0)

问题信息

难度:
4条回答 1132浏览

热门推荐

通过挑战的用户

查看代码