You are given an array of points in the X-Y plane points where points[i] = [xi, yi].
Return the minimum area of any rectangle formed from these points, with sides not necessarily parallel to the X and Y axes. If there is not any such rectangle, return 0.
Answers within 10-5 of the actual answer will be accepted.
Example 1:
Input: points = [[1,2],[2,1],[1,0],[0,1]]
Output: 2.00000
Explanation: The minimum area rectangle occurs at [1,2],[2,1],[1,0],[0,1], with an area of 2.
Example 2:
Input: points = [[0,1],[2,1],[1,1],[1,0],[2,0]]
Output: 1.00000
Explanation: The minimum area rectangle occurs at [1,0],[1,1],[2,1],[2,0], with an area of 1.
Example 3:
Input: points = [[0,3],[1,2],[3,1],[1,3],[2,1]]
Output: 0
Explanation: There is no possible rectangle to form from these points.
Constraints:
1 <= points.length <= 50
points[i].length == 2
0 <= xi, yi <= 4 * 104
All the given points are unique.
Solutions
Solution 1: Hash Table + Enumeration
We use a hash table to store all the points, then enumerate three points \(p_1 = (x_1, y_1)\), \(p_2 = (x_2, y_2)\), \(p_3 = (x_3, y_3)\), where \(p_2\) and \(p_3\) are the two endpoints of the diagonal of the rectangle. If the line formed by \(p_1\) and \(p_2\) and the line formed by \(p_1\) and \(p_3\) are perpendicular, and the fourth point \((x_4, y_4)=(x_2 - x_1 + x_3, y_2 - y_1 + y_3)\) exists in the hash table, then we have found a rectangle. At this point, we can calculate the area of the rectangle and update the answer.
Finally, if a rectangle that satisfies the conditions is found, return the minimum area among them. Otherwise, return \(0\).
The time complexity is \(O(n^3)\) and the space complexity is \(O(n)\), where \(n\) is the length of the array \(\textit{points}\).