- 最小面积矩形
难度中等43
给定在 xy 平面上的一组点,确定由这些点组成的矩形的最小面积,其中矩形的边平行于 x 轴和 y 轴。
如果没有任何矩形,就返回 0。
示例 1:
输入:[[1,1],[1,3],[3,1],[3,3],[2,2]] 输出:4
示例 2:
输入:[[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]] 输出:2
public int minAreaRect(int[][] points) {
Set<Integer> pointSet = new HashSet<Integer>();
//将每个下标相加添加到set中,如果有重复的会去重。
for(int [] point : points){
pointSet.add(40001* point[0]+point[1]);
}
int ans = Integer.MAX_VALUE;//求最小值 应该设置一个最大值
for(int i=0;i<points.length;i++){
for(int j=i+1;j<points.length;j++){
//两个坐标不在同一行 同一列,那么势必就是对角线关系。
if(points[i][0]!=points[j][0] && points[i][1]!=points[j][1]){
if(pointSet.contains(40001 * points[i][0]+ points[j][1]) && pointSet.contains(40001 * points[j][0]+points[i][1])){
ans = Math.min(Math.abs(points[j][0]-points[i][0])*Math.abs(points[j][1]-points[i][1]),ans);
}
}
}
}
return ans < Integer.MAX_VALUE ? ans : 0;
}