LeetCode 836. 矩形重叠

在这里插入图片描述
注:坐标系y轴是向上的

自己想到的

	public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
        int x1 = rec1[0], x2 = rec1[2], x3 = rec2[0], x4 = rec2[2];
        int y1 = rec1[1], y2 = rec1[3], y3 = rec2[1], y4 = rec2[3];

        boolean one = (x2>x3 && y2>y3) && (x1<x4 && y1<y4); //第一种情况rec1在左下,rec2在右上
        boolean two = (x2<x3 && y2<y3) && (x1>x4 && y1>y4); //反过来

        return one || two;
    }

在这里插入图片描述

官方题解一

  public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
        return !(rec1[2] <= rec2[0] ||   // left
                 rec1[3] <= rec2[1] ||   // bottom
                 rec1[0] >= rec2[2] ||   // right
                 rec1[1] >= rec2[3]);    // top
    }

考虑不重叠的情况,最后取反

官方题解二

 public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
        return (Math.min(rec1[2], rec2[2]) > Math.max(rec1[0], rec2[0]) &&
                Math.min(rec1[3], rec2[3]) > Math.max(rec1[1], rec2[1]));
    }
  • 重叠区域也是一个矩形,则两个矩形的水平边投影到 x 轴上时会有交集,y轴同理也会有交集
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值