​LeetCode解法汇总1401. 圆和矩形是否有重叠

news/2024/7/3 0:34:02

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

给你一个以 (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 <= radius <= 2000
  • -104 <= xCenter, yCenter <= 104
  • -104 <= x1 < x2 <= 104
  • -104 <= y1 < y2 <= 104

解题思路:

/**

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

* 解题思路:

* 首先,如果圆心在矩形内,则直接返回true即可。

* 其它情况,我们就要找圆心距离矩形的最近距离了。

* 如果x轴在x1到x2的范围内,则最近的距离就是min(abs(yCenter - y1), abs(yCenter - y2))。同理,min(abs(xCenter - x1), abs(xCenter - x2))也符合,取两者较小值。

* 如果都不符合,则最小值就是距离4个顶点的最近值。

* 为了方便运算,所以我们求平方之后的值进行计算。distance <= pow(radius, 2)就是在范围内。

*/

代码:

class Solution1401
{
public:
    int getDistance(int xCenter, int yCenter, int x, int y)
    {
        return pow(xCenter - x, 2) + pow(yCenter - y, 2);
    }

    bool checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2)
    {
        if (((xCenter >= x1 && xCenter <= x2) || (xCenter >= x2 && xCenter <= x1)) && ((yCenter >= y1 && yCenter <= y2) || (yCenter >= y2 && yCenter <= y1)))
        {
            return true;
        }
        int distance = 20000;
        if ((xCenter >= x1 && xCenter <= x2) || (xCenter >= x2 && xCenter <= x1))
        {
            distance = min(abs(yCenter - y1), abs(yCenter - y2));
        }
        if ((yCenter >= y1 && yCenter <= y2) || (yCenter >= y2 && yCenter <= y1))
        {
            distance = min(distance, min(abs(xCenter - x1), abs(xCenter - x2)));
        }
        distance = pow(distance, 2);
        distance = min(distance, getDistance(xCenter, yCenter, x1, y1));
        distance = min(distance, getDistance(xCenter, yCenter, x1, y2));
        distance = min(distance, getDistance(xCenter, yCenter, x2, y1));
        distance = min(distance, getDistance(xCenter, yCenter, x2, y2));
        return distance <= pow(radius, 2);
    }
};


http://lihuaxi.xjx100.cn/news/1275004.html

相关文章

微软公布量子超级计算机路线图

光子盒研究院 6月22日&#xff0c;微软公布了三个重要的量子计算公告。首先&#xff0c;公司宣布它已经实现了通往量子超级计算机的六步路线图的第一个里程碑&#xff0c;并发表了一篇经同行评议的研究论文来证明这一成就。 这家科技巨头的第二项公告是将其人工智能&#xff08…

一边擦泪,一边誊写,早已忘却的面试题

哇哇哇。。。一边擦泪&#xff0c;一边誊写&#xff0c;早已忘却的面试题&#xff0c;需要在隆冬忆起。。。 vue vue自定义指令 通过自定义指令&#xff0c;我们可以扩展Vue的行为&#xff0c;让它在渲染DOM元素时添加额外的特性和事件&#xff0c;从而更好地完成业务需求vu…

Python中常见的10个高级特性解析

目录 1. 什么是Python中的装饰器&#xff1f;如何使用装饰器&#xff1f;2. 什么是Python中的迭代器和生成器&#xff1f;它们有什么区别&#xff1f;3. Python中的GIL是什么&#xff1f;它如何影响多线程应用程序&#xff1f;4. 什么是Python中的元类&#xff1f;如何使用元类…

PL SQL结构化编程

第一章、存储过程 1.1、概念 存储过程是一个命名的程序块&#xff0c;包括过程的名称、过程使用的参数&#xff0c;以及过程执行的操作。 &#xff08;类似于java中的一种函数&#xff0c;但是存在区别&#xff09; 可以指定输入参数&#xff0c;和输出参数。 1.2、创建存…

[Web程序设计]实验:会话技术应用

一、实验目的 &#xff08;1&#xff09;掌握Cookie和session两种会话跟踪技术和它们的应用和区别。 &#xff08;2&#xff09;掌握Cookie和session两种会话的应用和区别。 二、实验内容 &#xff08;1&#xff09;请设计一个类&#xff0c;使用Cookie技术实现显示用户上次…

Linux最全常用命令

1、Linux背景&#xff1a; Linux是一种开源的类Unix操作系统&#xff0c;最初由Linus Torvalds在1991年开发&#xff0c;并且得到了全球开发者的广泛参与。它以其稳定性、安全性和灵活性而闻名&#xff0c;并被广泛用于服务器环境和嵌入式设备。 文件和目录操作&#xff1a; l…

云数据库是未来趋势,亚马逊云科技位居Gartner报告“领导者”

最近,数据库领域发生了一个大事件,可以称得上是一座里程碑。全球最具权威的IT研究公司Gartner最近发布了一个消息:在2022年的全球DBMS市场份额中,亚马逊云科技的数据库超越微软,登顶第一。 亚马逊云科技、微软、Oracle这三巨头近几年一直排名前三,占据了全球DBMS超过三分之二的…

Java集合之LinkedList详解

Java集合之LinkedList 一、LinkedList类的继承关系1. 基类功能说明1.1. Iterator&#xff1a;提供了一种方便、安全、高效的遍历方式。1.2. Collection&#xff1a;为了使ArrayList具有集合的基本特性和操作。1.3. Queue: LinkedList是一种队列&#xff08;Queue&#xff09;数…