圆和矩形是否有重叠【LC1401】
给你一个以
(radius, xCenter, yCenter)表示的圆和一个与坐标轴平行的矩形(x1, y1, x2, y2),其中(x1, y1)是矩形左下角的坐标,而(x2, y2)是右上角的坐标。如果圆和矩形有重叠的部分,请你返回
true,否则返回false。换句话说,请你检测是否 存在 点
(xi, yi),它既在圆上也在矩形上(两者都包括点落在边界上的情况)。
-
思路
题意可以转化为矩形区域内有点在圆形区域中,如果一个点在圆形内,那么其至圆心的距离小于等于半径。那么我们可以找到横坐标的平方+纵坐标的平方到圆心的距离最小值对应的点,如果其在圆内,那么表示圆和矩形有相交区域
-
实现
class Solution { public boolean checkOverlap( int radius, int xCenter, int yCenter, int x1, int y1, int x2, int y2) { int a = f(x1, x2, xCenter); int b = f(y1, y2, yCenter); return a * a + b * b <= radius * radius; } private int f(int i, int j, int k) { if (i <= k && k <= j) { return 0; } return k < i ? i - k : k - j; } } 作者:ylb 链接:https://leetcode.cn/problems/circle-and-rectangle-overlapping/solutions/2319357/python3javacgotypescript-yi-ti-yi-jie-sh-vpsu/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。- 复杂度
- 时间复杂度:O(1)\mathcal{O}(1)O(1)
- 空间复杂度:O(1)\mathcal{O}(1)O(1)
- 复杂度

该问题讨论了一个算法,用于检查给定的圆(由半径和中心坐标定义)和矩形(由其对角坐标定义)是否有重叠。算法通过计算矩形边界的点到圆心的最短距离平方并比较它与圆的半径平方来确定是否重叠。如果这个距离小于等于半径的平方,那么圆和矩形有交集。该算法的时间和空间复杂度均为常数级别,即O(1)。
411

被折叠的 条评论
为什么被折叠?



