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: TrueNote:
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.分析
正方形的的四个点连接起来有4条边和两条对角线,4条边的长度相等,两条对角线的长度相等,所以如果计算两两的长度只有两种结果,那么这四个点连接起来一定就是正方形。
Code
class Solution { public: bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) { vector<vector<int>> p; p.push_back(p1); p.push_back(p2); p.push_back(p3); p.push_back(p4); set<int> len; for (int i = 0; i < 3; i ++) { for (int j = i +1; j <=3; j ++) { int diffx = p[j][0] - p[i][0]; int diffy = p[j][1] - p[i][1]; if (diffx == 0 && diffy == 0) return false; len.insert(diffx * diffx + diffy * diffy); } } return len.size() == 2 ? true: false; } };运行效率
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Valid Square.
Memory Usage: 8.9 MB, less than 50.28% of C++ online submissions for Valid Square.