593. Valid Square

根据初中几何的知识可以知道正方形的四条边相等,两条对角线相等,满足这两个条件的四边形一定是正方形。

那么这样就好办了,只需要对四个点,两两之间算距离,如果计算出某两个点之间距离为0,
说明两点重合了,直接返回 false,

如果不为0,那么就建立距离和其出现次数之间的映射,最后如果我们只得到了 两个不同 的距离长度,
那么就说明是正方形了

T: O(1)

S: O(1)

class Solution {
    public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
        Set<Integer> set = new HashSet<>();
        set.add(dist(p1,p2));
        set.add(dist(p1,p3));
        set.add(dist(p1,p4));
        set.add(dist(p2,p3));
        set.add(dist(p2,p4));
        set.add(dist(p3,p4));
        return !set.contains(0) && set.size() == 2;
    }
    // (x0, y0) and (y0, y1)
    // dist = (x0 - x1)^2 + (y0 - y1)^2
    private int dist(int[] p1, int[] p2) {
        return (p1[0]-p2[0])*(p1[0]-p2[0]) + (p1[1]-p2[1])*(p1[1]-p2[1]);
    }
}


/*

[0,0]   [1,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
[0,1]   [1,1]


[1,0], p2 = , p3 = [0,1], p4 = [0,-1]

        [0,1]
[-1,0]        [1,0]
       [0,-1]
       

*/

Last updated