☰
A.每日一题:1401. 圆和矩形是否有重叠
2026/9/25 19:29:19 网站建设 项目流程

题目链接:1401. 圆和矩形是否有重叠(中等)

算法原理:

解法:找距离圆心最近的点

时间复杂度O(1)

0ms击败100.00%

题目给的提示:找到正方形上距离圆心最近的点,计算该点到圆心的距离,并判断其是否小于等于半径

我们要做的两件事:

①找到在矩形中到圆心(xCenter,yCenter)最近的点(x,y)

②勾股定理判断点(x,y)是否在圆中

其中x1≤x≤x2,y1≤y≤y2

勾股定理得到d²=(x-xCenter)²+(y-yCenter)²

为了最小化上述的值,我们需要让(x,y)尽可能的接近圆心(xCenter,yCenter)

对于x:

当x1≤xCenter≤x2时(圆心在正方形内):x=xCenter

当xCenter≤x1时(圆心在正方形左侧):x=x1

当x2≤xCenter时(圆心在正方形右侧):x=x2

我们可以用一句话总结上述情况:xCenter与x2取最小值,xCenter与x1取最大值

用公式表示为x=max(x1,min(xCenter,x2))

对于y同理:y=max(y1,min(yCenter,y2))

最后返回 (x-xCenter)²+(y-yCenter)² ≤ radius² 即可

Java代码:

class Solution { //1401. 圆和矩形是否有重叠 public boolean checkOverlap(int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) { //找到在矩形中的到圆心(xCenter,yCenter)最近的点(x,y) int x=Math.max(x1,Math.min(xCenter,x2)); int y=Math.max(y1,Math.min(yCenter,y2)); //判断(x,y)是否在圆中 return (x-xCenter)*(x-xCenter)+(y-yCenter)*(y-yCenter)<=radius*radius; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询