You are given npoints in the plane that are all distinct, where points[i] = [xi, yi]. A boomerang is a tuple of points (i, j, k) such that the distance between i and j equals the distance between i and k(the order of the tuple matters).
Return the number of boomerangs.
Example 1:
Input: points = [[0,0],[1,0],[2,0]]
Output: 2
Explanation: The two boomerangs are [[1,0],[0,0],[2,0]] and [[1,0],[2,0],[0,0]].
Example 2:
Input: points = [[1,1],[2,2],[3,3]]
Output: 2
Example 3:
Input: points = [[1,1]]
Output: 0
Constraints:
n == points.length
1 <= n <= 500
points[i].length == 2
-104 <= xi, yi <= 104
All the points are unique.
Solutions
Solution 1: Enumeration + Counting
We can enumerate each point in points as the boomerang's point \(i\), and then use a hash table \(cnt\) to record the number of times the distance from other points to \(i\) appears.
If there are \(x\) points with equal distance to \(i\), then we can arbitrarily select two of them as the boomerang's \(j\) and \(k\). The number of schemes is \(A_x^2 = x \times (x - 1)\). Therefore, for each value \(x\) in the hash table, we calculate and accumulate \(A_x^2\), which gives us the total number of boomerangs that meet the problem's requirements.
The time complexity is \(O(n^2)\), and the space complexity is \(O(n)\), where \(n\) is the length of the array points.