LeetCode 836. 矩形重叠

我的LeetCode:https://leetcode-cn.com/u/ituring/

我的LeetCode刷题源码[GitHub]:https://github.com/izhoujie/Algorithmcii

LeetCode 836. 矩形重叠

题目

矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 为左下角的坐标,(x2, y2) 是右上角的坐标。

如果相交的面积为正,则称两矩形重叠。需要明确的是,只在角或边接触的两个矩形不构成重叠。

给出两个矩形,判断它们是否重叠并返回结果。

示例 1:

输入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]
输出:true
示例 2:

输入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]
输出:false

提示:

两个矩形 rec1 和 rec2 都以含有四个整数的列表的形式给出。
矩形中的所有坐标都处于 -10^9 和 10^9 之间。
x 轴默认指向右,y 轴默认指向上。
你可以仅考虑矩形是正放的情况。

解题思路

思路1-分析不相交的情况,然后取反

若两个矩形不相交,分析其边界则必有以下其一:

  • 两矩形x轴方向上分离,即靠左矩形的右边界x必不大于靠右矩形的左边界x
  • 两矩形y轴方向上分离,即靠下矩形的上边界y必不大于靠上矩形的下边界y

总结:忽略点与线的问题,将问题抽象到矩形的边界问题,或者说是有宽度的线段,即在长度为x的线段上增加了宽度y,判断线段是否重叠

算法源码示例

package leetcode;

/**
 * @author ZhouJie
 * @date 2020年3月18日 下午2:16:28 
 * @Description: 836. 矩形重叠
 */
public class LeetCode_0836 {

}

class Solution_0836 {
	/**
	 * @author: ZhouJie
	 * @date: 2020年3月18日 下午3:24:09 
	 * @param: @param rec1
	 * @param: @param rec2
	 * @param: @return
	 * @return: boolean
	 * @Description: 1-判断矩形的边界;
	 *
	 */
	public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
		// 先判断不重叠的情况
		// 因为不确定两矩形谁前谁后,谁上谁下,所以前后和上下的位置各需要进行两次判断,最后取反即可
		return !(rec1[2] <= rec2[0] || rec2[2] <= rec1[1] || rec1[3] <= rec2[1] || rec2[3] <= rec1[1]);
	}
}

posted @ 2020-03-18 15:33  图灵的图,图灵的灵。  阅读(215)  评论(0编辑  收藏  举报