LeetCode 1401. 圆和矩形是否有重叠
题目描述
思路分析
解法一:几何最近点(推荐)
核心思路:
- 计算圆心到矩形的最近点
(cx, cy),通过坐标截断实现。- 若圆心到该点距离平方
<= r^2,则圆与矩形相交。
复杂度分析:
- 时间复杂度:O(1)。
- 空间复杂度:O(1)。
class Solution {
public boolean checkOverlap(int radius, int xCenter, int yCenter,
int x1, int y1, int x2, int y2) {
int cx = clamp(xCenter, x1, x2);
int cy = clamp(yCenter, y1, y2);
int dx = xCenter - cx;
int dy = yCenter - cy;
return dx * dx + dy * dy <= radius * radius;
}
private int clamp(int v, int lo, int hi) {
if (v < lo) {
return lo;
}
if (v > hi) {
return hi;
}
return v;
}
}
func checkOverlap(radius int, xCenter int, yCenter int, x1 int, y1 int, x2 int, y2 int) bool {
cx := clamp(xCenter, x1, x2)
cy := clamp(yCenter, y1, y2)
dx := xCenter - cx
dy := yCenter - cy
return dx*dx+dy*dy <= radius*radius
}
func clamp(v, lo, hi int) int {
if v < lo {
return lo
}
if v > hi {
return hi
}
return v
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 812. 最大三角形面积 | 简单 | 几何 |
| 223. 矩形面积 | 中等 | 几何 |
| 587. 安装栅栏 | 困难 | 凸包 |
| 149. 直线上最多的点数 | 困难 | 几何 |
| 1232. 缀点成线 | 简单 | 几何 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!