836. Rectangle Overlap

2023-12-21 16:08
文章标签 rectangle overlap 836

本文主要是介绍836. Rectangle Overlap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

说明:

  1. 两个矩形 rec1rec2 都以含有四个整数的列表的形式给出。
  2. 矩形中的所有坐标都处于 -10^910^9 之间。

解法一

//时间复杂度O(1), 空间复杂度O(1)
class Solution {
public:bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {return rec1[0] < rec2[2] && rec2[0] < rec1[2] &&rec1[1] < rec2[3] && rec2[1] < rec1[3];}
};

用了一个潜在的规律,第一次见到还是很难想到。

最初想的是找出所有相交的情况,然后找出所有相交情况的共同点做为判据,但是相交的情况分类太多了,不好找规律。所以我们要换个思路,如下。

两个矩形不相交有两种情况:要么两矩形是“上-下”的位置关系,要么是“左-右”的位置关系(两种可以同时满足)。

上-下:(按谁在上分,有两种情况,这里只画一种):_ _ __________ (x2,y2)_ _ _ _ _ _ _ _ _|          |_ _|__________| _ _ _ _ _ _ _ _ _ _ _ _
(x1,y1)    __________ (x4,y4)|          ||__________|(x3,y3) 左-右:(按谁在左分,也两种情况,这里只画一种)|__________|(x2,y2)|          |        ___________ (x4,y4)|__________|       |           |
(x1,y1)        |       |___________||          |     (x3,y3) 

上面的情况都满足关系

           y1 >= y4 或 y2 <= y3  (上-下)或 x2 <= x3 或 x4 <= x1  (左-右)

那除了以上的情况,就都是相交了,如下:

           y1 < y4 且 y2 > y3  (上-下)且 x2 > x3 且 x4 > x1  (左-右)

直接返回以上结果。

思考这个题时很容易犯一个常见的逻辑错误,就是没搞清楚判据是否是充分必要的。例如,满足一个条件可以判定两矩形相交,但是不满足这个条件,不一定能说明这两个矩形不相交。所以在找规律的时候一定要包括所有情况,不多不少。

2019/07/11 10:28

这篇关于836. Rectangle Overlap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/520628

相关文章

上海大学《2022年836+915自动控制原理真题及答案》 (完整版)

Part1:2022年上海大学真题题目 学硕836 专硕915 Part2:2022年上海大学真题答案 学硕836 专硕915

C# 使用中点查找矩形的角(Find Corners of Rectangle using mid points)

考虑一个矩形 ABCD,我们给出了边 AD 和 BC 中点(分别为 p 和 q)的坐标以及它们的长度 L(AD = BC = L)。现在给定参数,我们需要打印 4 个点 A、B、C 和 D 的坐标。 例子:  输入:p = (1, 0)         q = (1, 2)         L = 2 输出:(0,0),(0,2),(2,2),(2,0) 解释: 打

OpenCV绘图函数(15)图像上绘制矩形函数 rectangle()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C++11 算法描述 绘制一个简单的、粗的或填充的直立矩形。 这个函数 cv::rectangle 绘制一个矩形轮廓或一个填充的矩形,其两个相对的顶点分别是 pt1 和 pt2。 函数原型1 void cv::rectangle(InputOutputArra

Leetcode209: Maximal Rectangle

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and return its area. 给定一个矩阵中,只有0和1,求出这个矩阵的一个最大的子矩阵,其中只包含1. 例如 01101 11010 01110 11110 1

LeetCode | Maximal Rectangle

Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing only 1's and return its area. For example, given the following matrix: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0

Leetcode 391. Perfect Rectangle

解题思想 这道题是说给了一堆小矩形的坐标(左下角和右上角围成的),问其能否组合成一个完美的矩形(刚刚好,不多,不少,不交叉重复)。 核心思想就是:能够正好围成一个矩形的情况就是: 有且只有: 最左下/最左上/最右下/最右上的四个点只出现过一次,其他肯定是出现两次和四次(保证完全覆盖) 上面四个点围成的面积,正好等于所有子矩形的面积之和(保证不重复) Leetcode代码收录,求粉求星星。

nyoj-836-画图

#include<stdio.h> int main() {     int s,n;     scanf("%d",&s);     while(s--)     {         int i,j;         scanf("%d",&n);         for(i=0;i<n;i++)         {           for(j=0

LeetCode-492. Construct the Rectangle

问题:https://leetcode.com/problems/construct-the-rectangle/?tab=Description For a web developer, it is very important to know how to design a web page’s size. So, given a specific rectangular web page’

[LeetCode] Rectangle Area

Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defined by its bottom left corner and top right corner as shown in the figure. Assume that the total area

uva 12307 - Smallest Enclosing Rectangle(旋转卡壳)

题目链接:uva 12307 - Smallest Enclosing Rectangle 两组踵对点围成长方形,枚举出所有可行长方形维护最小值。 #include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <complex>#include <algorithm>using