Every day a Leetcode
题目来源:2249. 统计圆内格点数目
解法1:枚举
遍历数组 circles,先求出枚举的上下边界。
枚举边界内的所有点,再遍历数组 circles,如果当前点在枚举的圆内, 答案 +1。
最后返回答案。
可以有的优化:先按半径从大到小排序,这样可以更早地遇到包含当前枚举的点的圆。
代码:
/*
* @lc app=leetcode.cn id=2249 lang=cpp
*
* [2249] 统计圆内格点数目
*/
// @lc code=start
class Solution
{
public:
int countLatticePoints(vector<vector<int>> &circles)
{
// 特判
if (circles.empty())
return 0;
// 求枚举的最大、最小边界
int min_x = INT_MAX, min_y = INT_MAX;
int max_x = 0, max_y = 0;
for (vector<int> &circle : circles)
{
int x = circle[0], y = circle[1], r = circle[2];
min_x = min(min_x, x - r);
min_y = min(min_y, y - r);
max_x = max(max_x, x + r);
max_y = max(max_y, y + r);
}
// 枚举点,遇到包含当前点的圆,答案 +1
int ans = 0;
for (int i = min_x; i <= max_x; i++)
for (int j = min_y; j <= max_y; j++)
for (vector<int> &circle : circles)
{
int x = circle[0], y = circle[1], r = circle[2];
if ((x - i) * (x - i) + (y - j) * (y - j) <= r * r)
{
ans++;
break;
}
}
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n),其中 n 是数组 circles 的长度。
空间复杂度:O(1)。
LeetCode2249:圆内格点数量统计算法优化
本文介绍了解决LeetCode问题2249的一种方法,通过枚举并检查每个网格点是否在给定圆内,对圆进行半径排序后优化查找过程。时间复杂度为O(n),空间复杂度为O(1)。
1264

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



