LeetCode Q 593 - Valid Square
Given the coordinates of four points in 2D space, return whether the four points could construct a square.
The coordinate (x,y) of a point is represented by an integer array with two integers.
Example: Input: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1] ; Output: True
Note:
- All the input integers are in the range [-10000, 10000].
- A valid square has four equal sides with positive length and four equal angles (90-degree angles).
- Input points have no order.
Solution
Code:
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
int[][] p = {p1, p2, p3, p4};
Arrays.sort(p, (a, b) -> {
if (a[0] != b[0])
return a[0] - b[0];
return a[1] - b[1];
});
return dist(p[0], p[1]) != 0
&& dist(p[0], p[1]) == dist(p[1], p[3])
&& dist(p[1], p[3]) == dist(p[3], p[2])
&& dist(p[3], p[2]) == dist(p[2], p[0])
&& dist(p[2], p[0]) == dist(p[0], p[1])
&& dist(p[3], p[0]) == dist(p[2], p[1]);
}
private int dist (int[] p1, int[] p2) {
return (p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) * (p1[1] - p2[1]);
}