939. Minimum Area Rectangle

對角線就可以確定一個 rec!! (不需要4點)

怎麼做呢..?

對角線就可以確定一個 rec!! (不需要4點)

A(x1, y1)                       C (so in Map(x1), find y2 

D (so in Map(x2), find y1        B(x2, y2) 

另一個 idea, c_d hash string 存 set, 比較慢

T: O(n^2)
S: O(n)
class Solution {
    public int minAreaRect(int[][] points) {
        Map<Integer, HashSet<Integer>> map = new HashMap<>();
        
        for (int[] point : points) {
            map.putIfAbsent(point[0], new HashSet<>());
            map.get(point[0]).add(point[1]);
        }
        
        int result = Integer.MAX_VALUE;
        for (int i = 0; i < points.length; i++) {
            for (int j = i+1; j < points.length; j++) {
                int x1 = points[i][0];
                int y1 = points[i][1];
                int x2 = points[j][0];
                int y2 = points[j][1];
                
                if (x1 == x2 || y1 == y2) {
                    continue;
                }
                if (map.get(x1).contains(y2) && map.get(x2).contains(y1)) {
                    result = Math.min(result, Math.abs(x1-x2)*Math.abs(y1-y2));
                }
            }
        }
        return result == Integer.MAX_VALUE ? 0 : result;
    }
}

/*
two pair points' dist is the same


對角線就可以確定一個 rec!! (不需要4點)

A(x1, y1)                       C (so in Map(x1), find y2 

D (so in Map(x2), find y1        B(x2, y2) 


T: O(n^2)
S: O(n)
*/

Last updated