zoukankan      html  css  js  c++  java
  • 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]);
    	}
    }
    
    
  • 相关阅读:
    python 得到请求的返回内容
    pyhton编码解码理解
    .NET数据库编程求索之路--1.引子
    (转)C#调用C函数(DLL)传递参数问题
    C# 如何在Excel 动态生成PivotTable
    高效Web开发的10个jQuery代码片段
    关于大型网站技术演进的思考(一)--存储的瓶颈(1)
    100. Same Tree
    226. Invert Binary Tree
    169. Majority Element
  • 原文地址:https://www.cnblogs.com/izhoujie/p/12517711.html
Copyright © 2011-2022 走看看