题目地址:
https://leetcode.com/problems/circle-and-rectangle-overlapping/description/
给定一个圆的圆心和半径,还有一个矩形的左下点和右上点,矩形是正着放的,问圆和矩形是否有交集。题目保证圆心和矩形的四个点都是整点,并且半径也是整数。
如果圆心在矩形内那肯定有交集。否则的话,有交集等价于矩形的四条边上有整点在圆内,可以暴力枚举。代码如下:
class Solution {
public:
bool checkOverlap(int r, int xc, int yc, int x1, int y1, int x2, int y2) {
x1 -= xc, x2 -= xc;
y1 -= yc, y2 -= yc;
if (x1 <= 0 && 0 <= x2 && y1 <= 0 && 0 <= y2) return true;
#define check(x, y) (x * x + y * y <= r * r)
for (int x = x1; x <= x2; x++)
if (check(x, y1) || check(x, y2)) return true;
for (int y = y1; y <= y2; y++)
if (check(x1, y) || check(x2, y)) return true;
return false;
}
};
时间复杂度 O ( x 2 − x 1 + y 2 − y 1 ) O(x_2-x_1+y_2-y_1) O(x2−x1+y2−y1),空间 O ( 1 ) O(1) O(1)。