Leetcode.1401 圆和矩形是否有重叠

news2024/10/5 16:30:14

题目链接

Leetcode.1401 圆和矩形是否有重叠 Rating : 1709

题目描述

给你一个以 (radius, xCenter, yCenter)表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2),其中 (x1, y1)是矩形左下角的坐标,而 (x2, y2)是右上角的坐标。

如果圆和矩形有重叠的部分,请你返回 true,否则返回 false

换句话说,请你检测是否 存在(xi, yi),它既在圆上也在矩形上(两者都包括点落在边界上的情况)。

示例 1 :

在这里插入图片描述

输入:radius = 1, xCenter = 0, yCenter = 0, x1 = 1, y1 = -1, x2 = 3, y2 = 1
输出:true
解释:圆和矩形存在公共点 (1,0) 。

示例 2 :

输入:radius = 1, xCenter = 1, yCenter = 1, x1 = 1, y1 = -3, x2 = 2, y2 = -1
输出:false

示例 3 :

在这里插入图片描述

输入:radius = 1, xCenter = 0, yCenter = 0, x1 = -1, y1 = 0, x2 = 0, y2 = 1
输出:true

提示:

  • 1 < = r a d i u s < = 2000 1 <= radius <= 2000 1<=radius<=2000
  • − 1 0 4 < = x C e n t e r , y C e n t e r < = 1 0 4 -10^4 <= xCenter, yCenter <= 10^4 104<=xCenter,yCenter<=104
  • − 1 0 4 < = x 1 < x 2 < = 1 0 4 -10^4 <= x1 < x2 <= 10^4 104<=x1<x2<=104
  • − 1 0 4 < = y 1 < y 2 < = 1 0 4 -10^4 <= y1 < y2 <= 10^4 104<=y1<y2<=104

分析:
在这里插入图片描述

(x0,y0)是矩形的中心点,将其作为坐标系的原点,便于处理。

c是矩形的中心 (x0,y0)到圆心(xCenter,yCenter)的向量。

a是矩形的中心 (x0,y0)(x2,y2)的向量。

b就是我们要求的 矩形 到 圆的向量,b = { c[0] - a[0] , c[1] - a[1] }

我们只需要判断 向量b的模长 是否小于等于 圆的半径radius即可(判断 矩形 是否和 圆 相交)。

还有一些特殊情况:

此时 c[0] - a[0] < 0,所以我们就可以把它看成 0,即b = { 0 , c[1] - a[1] },就变成我们实际上要求的向量 u

在这里插入图片描述

此时 c[1] - a[1] < 0,所以我们就可以把它看成 0,即b = { c[0] - a[0] ,0 },就变成我们实际上要求的向量 u

在这里插入图片描述

判断圆和矩形是否相交参考这个

时间复杂度 : O ( 1 ) O(1) O(1)

C++代码:

class Solution {
public:
    bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
        //求矩形中心点
        double x0 = (x1+x2)/2.0;
        double y0 = (y1+y2)/2.0;

        //求向量 c , a
        //用绝对值是为了让 x分量 和 y分量 都为正数,相当于将其映射到了第一象限(因为第一象限的坐标值都是正数)
        vector<double> c {abs(xCenter - x0),abs(yCenter - y0)};
        vector<double> a {x2 - x0,y2 - y0};

        //求向量 b 如果其中一个分量是负数的话,直接看作0
        vector<double> b {max(c[0] - a[0],0.0),max(c[1] - a[1],0.0)};

        
        return b[0] * b[0] + b[1] * b[1] <= radius * radius;
    }
};

Java代码:

class Solution {
    public boolean checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) {
        double x0 = (x1+x2)/2.0;
        double y0 = (y1+y2)/2.0;

        double[] c = new double[2];
        double[] a = new double[2];
        double[] b = new double[2];

        c[0] = Math.abs(xCenter - x0);
        c[1] = Math.abs(yCenter - y0);

        a[0] = x2 - x0;
        a[1] = y2 - y0;

        b[0] = Math.max(c[0] - a[0],0.0);
        b[1] = Math.max(c[1] - a[1],0.0);

        return b[0]*b[0] + b[1]*b[1] <= radius*radius;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【重点掌握】Java基础之Javaweb核心技术详解

都说一入Java深似海&#xff0c;从此代码是爱人&#xff0c;但是学习的过程却从来都不轻松。当下&#xff0c;越来越多的互联网企业&#xff0c;招聘Java工程师时&#xff0c;明确写道需熟练掌握JavaWeb技术。作为衔接前后端的重要一环&#xff0c;JavaWeb技术已成为程序员向大…

Linux线程调度实验

Linux线程调度实验 1.获取线程属性 #include <stdio.h> #include <sys/types.h> #include <unistd.h> #include <pthread.h> #include <time.h> #include <stdlib.h> #include <errno.h> #define _GNU_SOURCE#define handle_error…

Power Apps 中判断用户的SharePoint Online Group权限

前言 最近&#xff0c;碰到一个棘手的问题&#xff0c;就是用户有个需求&#xff0c;就是想在Power Apps中判断一个用户是不是在某些AD安全组中。 通常&#xff0c;这样的情况&#xff0c;都需要去AAD中进行判断&#xff0c;判断这个人在不在某些组中&#xff0c;有Graph API可…

双因素方差分析全流程

上篇文章讲述了“单因素方差分析全流程总结”&#xff0c;单因素方差分析只是考虑了一个自变量&#xff08;定类&#xff09;与一个因变量&#xff08;定量&#xff09;之间的关系&#xff0c;但是在实际问题研究中可能研究两个或者几个因素与因变量之间的关系&#xff0c;例如…

监管持续,医疗卫生机构如何守好“涉疫”数据安全?

肆虐三年的新冠疫情&#xff0c;影响着全球经济发展、社会正常运行&#xff0c;也成为网络攻击、勒索软件攻击快速增长的温床&#xff0c;“滋生”了一系列网络、数据安全问题&#xff0c;受到各界关注。最近&#xff0c;上线运行三年的 “粤康码”发布公告、官宣部分服务下线&…

C++——map和set的应用总结

目录1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set的介绍3.1.2 set的使用3.2 multiset3.2.1 multiset的介绍3.2.2 multiset的使用3.3 map3.3.1 map的介绍3.3.2 map的使用operator[]3.4 multimap3.4.1 multimap的介绍3.4.2 multimap的使用3.5 map和set在OJ中的…

想知道车牌号码里都有什么秘密吗?

当我们看到一辆车时你会优先关注的是什么呢&#xff1f;关注它的外形还是LOGO?这个需要看你的角色定位&#xff0c;如果你是商人可能关注的方向是车的品牌&#xff0c;如果是警察可能关注的就是车牌号码。 因为&#xff0c;车牌号里的信息是很丰富的&#xff0c;可以通过查询车…

万物皆可集成资源包!低代码集成系列一网打尽

如何花最短的时间、用最少的成本解决客户的企业级应用定制问题&#xff1f; 如何满足数据库集成、Web API集成、第三方软件集成等需求&#xff0c;在如今万物皆可盘的当下&#xff0c;低代码如何用积木大玩具的方式快速构建各种应用&#xff0c;实现“万物皆可集成”&#xff…

C语言【柔性数组】

柔性数组&#x1fac5;什么是柔性数组&#x1fac5;柔性数组的使用&#x1fac5;柔性数组的优势&#x1fac5;什么是柔性数组 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。 C99 中&#xff0c;结构中的最后一…

ES6的迭代器与迭代协议Symbol.iterator

前言ES6新增了两个协议&#xff1a;可迭代协议&#xff1a;对象必须具有Symbol.Iterator属性&#xff0c;属性值为一个函数&#xff0c;当这个对象被迭代时&#xff0c;就会调用该函数&#xff0c;返回一个迭代器。迭代器协议&#xff1a;描述了迭代器对象的具体规则。迭代器迭…

ubuntu的文件系统结构

一. ubuntu 系统的根目录“/” Linux 系统下 “/” 就是系统的根目录&#xff0c;所有的目录是由根目录衍生出来的。 进入根目录的方法&#xff1a;终端输入" cd / " 命令。如下所示&#xff1a; 二. ubuntu 文件系统结构 /bin: 存放二进制的可执行文件。所谓…

【项目实战】接入极光推送SDK,实现从Java服务端后台推送自定义消息到Android车机端

一、需求描述 项目中需要接入极光推送SDK&#xff0c;实现从Java服务端推送消息到Android车机端&#xff0c;以下实现的功能主要是安卓端的&#xff0c;IOS端的虽然代码也兼容了&#xff0c;但是不在本次讨论范围内。以下是具体的实现过程。 二、极光推送介绍 极光推送是一款…

《Qt6开发及实例》6-4 显示SVG格式图片

目录 一、简介与设计 1.1 简介 1.2 设计 二、SvgWidget 2.1 鼠标滚轮事件 三、svgwindow 四、MainWindow 一、简介与设计 1.1 简介 1、SVG 的英文全称是 Scalable Vector Graphics&#xff0c;即可缩放的矢量图形。它是由万维网联盟&#xff08;W3C&#xff09;在 200…

什么是循环依赖,spring是如何去解决循环依赖问题的?什么是三级缓存?【spring】

文章目录什么是循环依赖&#xff1f;什么是三级缓存&#xff1f;执行流程什么是循环依赖&#xff1f; 在我们的开发中&#xff0c;会不可避免的遇到Bean之间循环依赖的&#xff0c;所谓循环依赖&#xff0c;就是两个或者两个以上的Bean互相持有对方&#xff0c;这样在程序运行…

几个流畅阅读与标记PDF文件的顶级 PDF 注释器

使用 PDF 注释工具改变您修改 PDF 文档的方式。 PDF 注释器提供了广泛的对象集&#xff0c;用于对内容进行说明。PDF 注释器的目的范围从标记页面内容到添加有洞察力的功能&#xff08;如表单&#xff09;。 您可以在评论表中添加建议&#xff0c;例如 – 便签。注释是指在 P…

【假捻停线需求沟通】

假捻工单上停产按钮: 假捻工单上结批复产按钮: 这是目前MES系统具备的功能,但是MES的生产状态和SAP不同步,也就是说MES的A机台上的B订单还在生产,SAP把B订单结批,但是当你刷新页面时,SAP会取A机台上的最新订单数据,也就是B订单进行显示。 换言之,SAP结批不掉A机台上…

PX4之代码结构

PX4开源飞控是目前主流的开源飞控项目&#xff0c;被很多公司作为飞控开发的参考。也广泛被用于现在流行的evtol验证机的飞控&#xff0c;进行初步的飞行验证。可能大多数AAM以及UAM都离不开PX4。 项目代码可以从github下载 $ git clone --recursive GitHub - PX4/PX4-Autopil…

构建Yocto项目

前言Yocto Project简称YP, 是一个致力于帮助开发者构建自己的Linux嵌入式的项目&#xff0c;除了Yocto还有其它的开源项目例如&#xff1a;Debian&#xff0c;著名的Ubuntu就是基于Debian来构建的发行版。什么是Yocto Project&#xff1f;Yocto Project (YP)是一个开源协作项目…

分类预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元数据分类预测

分类预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元数据分类预测 目录分类预测 | MATLAB实现WOA-CNN-GRU鲸鱼算法优化卷积门控循环单元数据分类预测分类效果基本描述模型描述程序设计参考资料分类效果 基本描述 1.Matlab实现WOA-CNN-GRU多特征分类预测&#xff0c;…

excel图表设计:有关表头的相关问题汇总

虽然表头很简单&#xff0c;但因为有不同样式需要、不同打印需要&#xff0c;也有很多人在表头上浪费了很多时间。文章总结了8种表头的典型形式和问题&#xff0c;让大家从此不再为表头浪费时间。每个excle表格都有一个表头&#xff0c;适合的表头能够让表格美观、逻辑清晰&…