跳到主要内容

1828.统计一个圆中点的数目

链接:1828.统计一个圆中点的数目
难度:Medium
标签:几何、数组、数学
简介:请你返回一个数组 answer ,其中 answer[j]是第 j 个查询的答案。

题解 1 - cpp

  • 编辑时间:2023-01-24
  • 执行用时:92ms
  • 内存消耗:15.8MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
vector<int> countPoints(vector<vector<int>>& points, vector<vector<int>>& queries) {
auto d = [&](vector<int> &a, vector<int> &b) {
return pow(abs(a[0] - b[0]), 2) + pow(abs(a[1] - b[1]), 2);
};
vector<int> ans(queries.size(), 0);
for (int i = 0; i < queries.size(); i++) {
for (auto &p : points) {
if (d(p, queries[i]) <= pow(queries[i][2], 2)) ans[i]++;
}
}
return ans;
}
};

题解 2 - python

  • 编辑时间:2023-01-24
  • 执行用时:2832ms
  • 内存消耗:15.2MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def countPoints(self, points: List[List[int]], queries: List[List[int]]) -> List[int]:
ans = [0] * len(queries)
def d(a, b): return pow(abs(a[0] - b[0]), 2) + pow(abs(a[1] - b[1]), 2)
for i in range(0, len(queries)):
for p in points:
if d(p, queries[i]) <= pow(queries[i][2], 2):
ans[i] += 1
return ans

题解 3 - rust

  • 编辑时间:2023-01-24
  • 执行用时:20ms
  • 内存消耗:2.2MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn count_points(points: Vec<Vec<i32>>, queries: Vec<Vec<i32>>) -> Vec<i32> {
let d =
|a: &Vec<i32>, b: &Vec<i32>| (a[0] - b[0]).abs().pow(2) + (a[1] - b[1]).abs().pow(2);
let mut ans = vec![0; queries.len()];
for i in 0..queries.len() {
for p in points.iter() {
if d(&queries[i], p) <= queries[i][2].pow(2) {
ans[i] += 1;
}
}
}
ans
}
}