此题解的思路是首先将点按照 x 坐标分组并存储在字典中,然后删除只有一个点的 x 坐标组,因为这些组不可能形成矩形。接着,对于每一对 x 坐标组合,计算可能的最小矩形面积。这通过检查两个 x 坐标组中共有的 y 坐标完成。对于每一对 x 坐标组合,计算 y 坐标的最小间距,然后乘以 x 坐标的差值来得到面积。最终,返回所有检查过的矩形中的最小面积。
时间复杂度: O(n^2 * m)
空间复杂度: O(n)
class Solution:
def minAreaRect(self, points: List[List[int]]) -> int:
# 使用字典存储每个x坐标对应的y坐标列表
row = collections.defaultdict(list)
re = float('inf')
flag = 0
for k, v in points:
row[k].append(v)
# 对x坐标进行排序
point_s = sorted(row.items(), key=lambda x: x[0])
# 删除只有一个y坐标的x坐标组
z = 0
while z < len(point_s):
if len(point_s[z][1]) < 2:
del point_s[z]
z -= 1
z += 1
# 对每个组的y坐标进行排序
for i in point_s:
i[1].sort()
# 检查每对x坐标组合
for i in range(len(point_s)):
for j in range(i+1, len(point_s)):
row_len = point_s[j][0] - point_s[i][0]
temp, col_len = [], float('inf')
for x in point_s[i][1]:
if x in point_s[j][1]:
temp.append(x)
y = 1
while y < len(temp):
col_len = min(temp[y] - temp[y-1], col_len)
flag = 1
y += 1
re = min(re, row_len * col_len)
return re if flag == 1 else 0