0593. Valid Square
https://leetcode.com/problems/valid-square
Description
Given the coordinates of four points in 2D space p1
, p2
, p3
and p4
, return true
if the four points construct a square.
The coordinate of a point pi
is represented as [xi, yi]
. The input is not given in any order.
A valid square has four equal sides with positive length and four equal angles (90-degree angles).
Example 1:
**Input:** p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
**Output:** true
Example 2:
**Input:** p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12]
**Output:** false
Example 3:
**Input:** p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1]
**Output:** true
Constraints:
p1.length == p2.length == p3.length == p4.length == 2
-104 <= xi, yi <= 104
ac
class Solution {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
Map<Long, Integer> map = new HashMap<>();
map.put(getDist(p1, p2), map.getOrDefault(getDist(p1, p2), 0) + 1);
map.put(getDist(p1, p3), map.getOrDefault(getDist(p1, p3), 0) + 1);
map.put(getDist(p1, p4), map.getOrDefault(getDist(p1, p4), 0) + 1);
map.put(getDist(p2, p3), map.getOrDefault(getDist(p2, p3), 0) + 1);
map.put(getDist(p2, p4), map.getOrDefault(getDist(p2, p4), 0) + 1);
map.put(getDist(p3, p4), map.getOrDefault(getDist(p3, p4), 0) + 1);
if (map.size() != 2) return false;
long max = 0;
for (long key : map.keySet()) {
max = Math.max(max, key);
}
return map.get(max) == 2;
}
private long getDist(int[] p1, int[] p2) {
return (long) Math.pow((p1[0] - p2[0]), 2) + (long) Math.pow((p1[1] - p2[1]), 2);
}
}
// calculate 6 edges, and inspect them. square should have 2 max length, 4 edge length
Last updated
Was this helpful?