class Solution {
public:
int numberOfBoomerangs(vector<vector<int>>& points) {
}
};
447. 回旋镖的数量
给定平面上 n
对 互不相同 的点 points
,其中 points[i] = [xi, yi]
。回旋镖 是由点 (i, j, k)
表示的元组 ,其中 i
和 j
之间的距离和 i
和 k
之间的欧式距离相等(需要考虑元组的顺序)。
返回平面上所有回旋镖的数量。
示例 1:
输入:points = [[0,0],[1,0],[2,0]] 输出:2 解释:两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]
示例 2:
输入:points = [[1,1],[2,2],[3,3]] 输出:2
示例 3:
输入:points = [[1,1]] 输出:0
提示:
n == points.length
1 <= n <= 500
points[i].length == 2
-104 <= xi, yi <= 104
相似题目
原站题解
java 解法, 执行用时: 149 ms, 内存消耗: 43.9 MB, 提交时间: 2024-01-08 00:25:37
class Solution { public int numberOfBoomerangs(int[][] points) { int ans = 0; for (int[] p : points) { Map<Integer, Integer> cnt = new HashMap<Integer, Integer>(); for (int[] q : points) { int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]); cnt.put(dis, cnt.getOrDefault(dis, 0) + 1); } for (Map.Entry<Integer, Integer> entry : cnt.entrySet()) { int m = entry.getValue(); ans += m * (m - 1); } } return ans; } }
cpp 解法, 执行用时: 448 ms, 内存消耗: 121.8 MB, 提交时间: 2024-01-08 00:25:18
class Solution { public: int numberOfBoomerangs(vector<vector<int>> &points) { int ans = 0; for (auto &p : points) { unordered_map<int, int> cnt; for (auto &q : points) { int dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]); ++cnt[dis]; } for (auto &[_, m] : cnt) { ans += m * (m - 1); } } return ans; } };
javascript 解法, 执行用时: 164 ms, 内存消耗: 48.4 MB, 提交时间: 2022-11-27 12:11:07
/** * @param {number[][]} points * @return {number} */ var numberOfBoomerangs = function(points) { let ans = 0; for (const p of points) { const cnt = new Map(); for (const q of points) { const dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]); cnt.set(dis, (cnt.get(dis) || 0) + 1); } for (const [_, m] of cnt.entries()) { ans += m * (m - 1); } } return ans; };
golang 解法, 执行用时: 136 ms, 内存消耗: 7 MB, 提交时间: 2022-11-27 12:10:46
func numberOfBoomerangs(points [][]int) (ans int) { for _, p := range points { cnt := map[int]int{} for _, q := range points { dis := (p[0]-q[0])*(p[0]-q[0]) + (p[1]-q[1])*(p[1]-q[1]) cnt[dis]++ } for _, m := range cnt { ans += m * (m - 1) } } return }
python3 解法, 执行用时: 772 ms, 内存消耗: 15.1 MB, 提交时间: 2022-11-27 12:10:33
class Solution: def numberOfBoomerangs(self, points: List[List[int]]) -> int: ans = 0 for p in points: cnt = defaultdict(int) for q in points: dis = (p[0] - q[0]) * (p[0] - q[0]) + (p[1] - q[1]) * (p[1] - q[1]) cnt[dis] += 1 for m in cnt.values(): ans += m * (m - 1) return ans