LeetCode 29. 矩形重叠 反向思维

题目描述

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

解题思路

一开始看到题目会想很多中情形,A包裹B左下角,A包裹B左上角,A包裹B右下角,A包裹B右上角。。。

。。。。。。。。。。

后来吐了一地血,其实找出来几种不相交的情况,其他都为true即可,有些时候还是要反向思维

代码如下

class Solution {
 public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
//        int x1=rec1[0],x2=rec1[2],y2=rec1[1],y1=rec1[3];
//        int j1=rec2[0],j2=rec2[2],k2=rec2[1],k1=rec2[3];
//         if (x1<j1&&x2>j1&&y1>k2&&y2<k2
//           ||j1>x1&&j1<x2&&k2>y2&&k2<y1
//           ||j2>x1&&j2<x2&&k2>y2&&k2<y1
//           ||j2>x1&&j2<x2&&k1>y2&&k1<y1
//                ) {
//            return true;
//        }
//         return false;
//
          if(rec2[1] >= rec1[3] || rec1[1] >= rec2[3]){
                 return false;
              }
          if(rec1[0] >= rec2[2] || rec1[2] <= rec2[0]){
                 return false;
              }
          return true;

        }
}

原文地址:https://www.cnblogs.com/Transkai/p/12520225.html

时间: 2024-11-09 06:02:45

LeetCode 29. 矩形重叠 反向思维的相关文章

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 提示: 两个矩形 rec

leetcode 签到 836. 矩形重叠

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 提示

leetcode 最大矩形和

1.枚举法(超时) 1 public class Solution { 2 public int largestRectangleArea(int[] height) { 3 int max=-1; 4 for(int i=0;i<height.length;i++) 5 { 6 int len=1; 7 int k=i-1; 8 while(k>=0&&height[k]<=height[i]) 9 { 10 k--; 11 len++; 12 } 13 k=i+1;

LeetCode 223. 矩形面积(Rectangle Area)

223. 矩形面积 223. Rectangle Area 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. LeetCode223. Rectangle Area中等 示例: 输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45 说明: 假设矩形面积不会超出 int 的范围. Java 实现 class Solution { public int computeArea(int A, int B, int

LeetCode --- 29. Divide Two Integers

题目链接:Divide Two Integers Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT. 这道题的要求是在不使用乘法.除法.取模运算的前提下实现两个整数相除.如果溢出,返回MAX_INT. 这道题的直接思路是用被除数不断减去除数,直到为0.这种方法的迭代次数是结果的大小,即比如结果为n,算法复杂度是O(n). 可以

矩形重叠检测。

// 矩形重叠类型注释 // CORNER_OVERLAP // -------------------- // | | // | | // | **********|********** // | * | * // | * | * // ---------*---------| * // * * // * * // ********************* // // ANCHOR_OVERLAP // ---- // | | // | | // *******|**|******* //

汉字转拼音 敏感词过滤 禁用词查找 提高程序效率另外一种思路:反向思维

汉字转拼音 敏感词过滤 禁用词查找 这些很常用的互联网需求 大家出道时是怎么做的? 大家偷懒时是怎么做的? 常规算法 - 从数据库到用户提交内容去匹配: 把数据库中所有数据压到大数组中(这时数据越多,与数据库连接时间越长) 根据用户提交的内容对大数组进行foreach(这时数据越多,占有服务器内存越大) 根据上述结果,进行相应的返回.处理(这时数据越多,与数据库连接时间越长) 优点: 逻辑简单,实施方便,开发成本低,人算素质要求低 缺点: 程序效率低,数据库压力大,速度慢 有bug,比如数据库中

[Swift]LeetCode836. 矩形重叠 | Rectangle Overlap

A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coordinates of its bottom-left corner, and (x2, y2) are the coordinates of its top-right corner. Two rectangles overlap if the area of their intersection is positive.  To b

[LeetCode] 223.矩形面积

题目链接: https://leetcode-cn.com/problems/rectangle-area 难度:中等 通过率:41.3% 题目描述: 在 二维 平面上计算出两个 由直线构成的 矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. 示例: 输入: -3, 0, 3, 4, 0, -1, 9, 2 输出: 45 说明: 假设矩形面积不会超出 int 的范围. 思路: 这道题,把问题考虑清楚就不难了! 首先,我们调整两个矩形,让第一个矩形是靠最左边的: 其次,