首页 > 其他分享 >[Leetcode] 0836. 矩形重叠

[Leetcode] 0836. 矩形重叠

时间:2023-11-13 10:04:11浏览次数:28  
标签:y2 rec1 重叠 x2 0836 rec2 矩形 Leetcode

836. 矩形重叠

English Version

题目描述

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

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

给出两个矩形 rec1rec2 。如果它们重叠,返回 true;否则,返回 false

 

示例 1:

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

示例 2:

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

示例 3:

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

 

提示:

  • rect1.length == 4
  • rect2.length == 4
  • -109 <= rec1[i], rec2[i] <= 109
  • rec1rec2 表示一个面积不为零的有效矩形

解法

方法一:判断不重叠的情况

我们记矩形 \(rec1\) 的坐标点为 \((x_1, y_1, x_2, y_2)\),矩形 \(rec2\) 的坐标点为 \((x_3, y_3, x_4, y_4)\)。

那么当满足以下任一条件时,矩形 \(rec1\) 和 \(rec2\) 不重叠:

  • 满足 \(y_3 \geq y_2\),即 \(rec2\) 在 \(rec1\) 的上方;
  • 满足 \(y_4 \leq y_1\),即 \(rec2\) 在 \(rec1\) 的下方;
  • 满足 \(x_3 \geq x_2\),即 \(rec2\) 在 \(rec1\) 的右方;
  • 满足 \(x_4 \leq x_1\),即 \(rec2\) 在 \(rec1\) 的左方。

当以上条件都不满足时,矩形 \(rec1\) 和 \(rec2\) 重叠。

时间复杂度 \(O(1)\),空间复杂度 \(O(1)\)。

Python3

class Solution:
    def isRectangleOverlap(self, rec1: List[int], rec2: List[int]) -> bool:
        x1, y1, x2, y2 = rec1
        x3, y3, x4, y4 = rec2
        return not (y3 >= y2 or y4 <= y1 or x3 >= x2 or x4 <= x1)

C++

class Solution {
public:
    bool isRectangleOverlap(vector<int>& rec1, vector<int>& rec2) {
        int x1 = rec1[0], y1 = rec1[1], x2 = rec1[2], y2 = rec1[3];
        int x3 = rec2[0], y3 = rec2[1], x4 = rec2[2], y4 = rec2[3];
        return !(y3 >= y2 || y4 <= y1 || x3 >= x2 || x4 <= x1);
    }
};

标签:y2,rec1,重叠,x2,0836,rec2,矩形,Leetcode
From: https://www.cnblogs.com/yege/p/17828508.html

相关文章

  • LeetCode 第 115 场双周赛
    2899.上一个遍历的整数感觉读题比较困难classSolution{public:vector<int>lastVisitedIntegers(vector<string>&words){vector<int>res,a;for(inti=0,cnt=0,x;i<words.size();i++){if(words[i......
  • [LeetCode] 715. Range 模块
    题目Range模块是跟踪数字范围的模块。设计一个数据结构来跟踪表示为半开区间的范围并查询它们。半开区间[left,right)表示所有left<=x<right的实数x。实现RangeModule类:RangeModule()初始化数据结构的对象。voidaddRange(intleft,intright)添加半开区......
  • leetcode hot100-02 字母异位词分组
    题目:字母异位词分组难度:中等地址:https://leetcode.cn/classic/problems/group-anagrams/description/描述:给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。过程:1、首先啥叫......
  • leetcode hot 100-01 两数之和
    题目:两数之和难度:简单题目地址:https://leetcode.cn/classic/problems/two-sum/description/过程一,因为难度是简单,就没有仔细审题,以为返回两个数就好,使用双指针,逻辑如下:对数组排序双指针分别指向头和尾两数之和大于target,尾部指针-1两数之......
  • Leetcode133.克隆图
     需要注意图中存在环路。JAVA:publicfinalNodecloneGraph(Nodenode){returndeepCopy(node,newHashMap<Integer,Node>());}privateNodedeepCopy(Nodenode,HashMap<Integer,Node>hisMap){if(null==node)return......
  • #yyds干货盘点# LeetCode程序员面试金典:累加数
    题目累加数是一个字符串,组成它的数字可以形成累加序列。一个有效的累加序列必须至少包含3个数。除了最开始的两个数以外,序列中的每个后续数字必须是它之前两个数字之和。给你一个只包含数字'0'-'9'的字符串,编写一个算法来判断给定输入是否是累加数。如果是,返回true......
  • #yyds干货盘点# LeetCode程序员面试金典:供暖器
    题目冬季已经来临。你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋houses和供暖器heaters的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。注意:所有供暖器heaters......
  • LeetCode-88题合并两个有序数组
    给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应......
  • LeetCode #1131 Maximum of Absolute Value Expression 绝对值表达式的最大值
    安装Flutter环境首先配置flutter3开发环境,照着官方教程傻瓜式安装即可。>>安装和环境配置|Flutter中文文档|Flutter中文开发者网站注意在国内网络环境下需要进行一些额外的环境配置:>>在中国网络环境下使用Flutter|Flutter中文文档|Flutter中文开发者网站Description......
  • LeetCode_0042. 接雨水
    题目描述给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨......