593.有效的正方形
【LetMeFly】593.有效的正方形
力扣题目链接:https://leetcode.cn/problems/valid-square/
给定2D空间中四个点的坐标 p1
, p2
, p3
和 p4
,如果这四个点构成一个正方形,则返回 true
。
点的坐标 pi
表示为 [xi, yi]
。输入 不是 按任何顺序给出的。
一个 有效的正方形 有四条等边和四个等角(90度角)。
示例 1:
输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1] 输出: True
示例 2:
输入:p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,12] 输出:false
示例 3:
输入:p1 = [1,0], p2 = [-1,0], p3 = [0,1], p4 = [0,-1] 输出:true
提示:
p1.length == p2.length == p3.length == p4.length == 2
-104 <= xi, yi <= 104
方法一:模拟
如果四个点能组成一个正方形,那么这$4$个点必须满足以下$3$个条件:
- 没有重合的点
- 四条边等长
- 存在直角
第$1$条比较容易理解,如果满足第$2$条,那么四边形就是菱形
只要菱形中存在一个直角(第$3$条),那么这个菱形就是矩形
有没有重合的点:
把四个点添加到一个数组里,然后用$i$和$j$遍历数组,一一判断是否有重合的点。
四条边等长:
注意,我们不知道哪两个点是一条边上的点,哪两个点是对角上的点。
但是只有$4$个点,我们把$4$个点的相对顺序,全部模拟一遍即可。
也就是说求一遍$4$个点的全排列。
存在直角:
相比起来,这个就很容易判断了。
直接使用勾股定理即可。
- 时间复杂度$O(C! + C^2)$,其中$C$是点的个数($=4$)。判断是否有相同的点的时间复杂度是$O(C^2)$,全排列的时间复杂度是$O(C!)$
- 空间复杂度$O(C)$,使用了数个等大小的临时变量。
拓展
如果想要debug某个点,可以重载运算符
1 |
|
这样,我们直接cout
某个点即可:
1 |
|
AC代码
C++
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/126053093
593.有效的正方形
https://blog.letmefly.xyz/2022/07/29/LeetCode 0593.有效的正方形/