Minimum Area Rectangle
Input: [[1,1],[1,3],[3,1],[3,3],[2,2]]
Output: 4Input: [[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
Output: 2Input: [[1,1],[1,3],[3,1],[3,3],[2,2]]
Output: 4Input: [[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
Output: 2 class Solution {
public int minAreaRect(int[][] points) {
Set<Integer> set = new HashSet<>();
for (int[] point : points) {
set.add(point[0] * 40001 + point[1]);
}
int minArea = Integer.MAX_VALUE;
// 枚举所有连线,因为只考虑平行于坐标轴的矩形,一条对角线就可以确定一个矩形
for (int i = 0; i < points.length; ++i) {
for (int j = i + 1; j < points.length; ++j) {
int[] p1 = points[i], p2 = points[j];
if (p1[0] == p2[0] || p1[1] == p2[1]) continue;
int[] p3 = new int[]{p1[0], p2[1]};
int[] p4 = new int[]{p2[0], p1[1]};
if (set.contains(p3[0] * 40001 + p3[1]) && set.contains(p4[0] * 40001 + p4[1])) {
// 说明找到一个矩形,计算面积
minArea = Math.min(minArea, Math.abs(p1[0] - p2[0]) * Math.abs(p1[1] - p2[1]));
}
}
}
return minArea < Integer.MAX_VALUE ? minArea : 0;
}
}