[LC] 939. Minimum Area Rectangle

Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from these points, with sides parallel to the x and y axes.

If there isn't any rectangle, return 0.

Example 1:

Input: [[1,1],[1,3],[3,1],[3,3],[2,2]]
Output: 4

Example 2:

Input: [[1,1],[1,3],[3,1],[3,3],[4,1],[4,3]]
Output: 2
class Solution {
    public int minAreaRect(int[][] points) {
        int min = Integer.MAX_VALUE;
        Map<Integer, Set<Integer>> map = new HashMap<>();
        // find all x and their associated y
        for (int[] point : points) {
            if (!map.containsKey(point[0])) {
                map.put(point[0], new HashSet<>());
            }
            map.get(point[0]).add(point[1]);
        }
        
        for (int[] p1 : points) {
            for (int[] p2 : points) {
                if (p1[0] != p2[0] && p1[1] != p2[1]) {
                    // make sure diagnal points p1, p2 having the connecting p3 and p4
                    if (map.get(p1[0]).contains(p2[1]) && map.get(p2[0]).contains(p1[1])) {
                        int curArea = Math.abs((p1[0] - p2[0]) * (p1[1] - p2[1]));
                        min = Math.min(min, curArea);
                    }
                }
            }
        }
        return min == Integer.MAX_VALUE ? 0: min;
    }
}
原文地址:https://www.cnblogs.com/xuanlu/p/12485402.html