当前位置:网站首页>【LeetCode】593. 有效的正方形
【LeetCode】593. 有效的正方形
2022-07-29 13:32:00 【pass night】
题目
给定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
思路
- 使用临边垂直的定理求取p1的两个临近点
- 取得p1的临近点和远点后,计算四条边的向量
- 使用:对边平行且相等,临边垂直且相等的定理结合向量向量运算进行判断
- 四个点重合的情况非正方形,单独判断
代码
class Solution:
def validSquare(self, p1: List[int], p2: List[int], p3: List[int], p4: List[int]) -> bool:
v1 = (p2[0] - p1[0], p2[1]-p1[1])
v2 = (p3[0] - p1[0], p3[1]-p1[1])
v3 = (p4[0] - p1[0], p4[1]-p1[1])
if v1[0]*v2[0]+v1[1]*v2[1] == 0:
neighbor1,neighbor2,far = p2,p3,p4
elif v1[0]*v3[0]+v1[1]*v3[1] == 0:
neighbor1,neighbor2,far = p2,p4,p3
elif v2[0]*v3[0]+v2[1]*v3[1] == 0:
neighbor1,neighbor2,far = p3,p4,p2
else:
return False
v1 = (neighbor1[0]-p1[0], neighbor1[1]-p1[1])
v2 = (neighbor2[0]-p1[0], neighbor2[1]-p1[1])
v3 = (far[0]-neighbor2[0], far[1]-neighbor2[1])
v4 = (far[0]-neighbor1[0], far[1]-neighbor1[1])
return (v1[0]*v3[1]-v1[1]*v3[0] == 0) and (v1[0]**2+v1[1]**2 == v3[0]**2+v3[1]**2) and (v1[0]*v2[0]+v1[1]*v2[1] == 0) and (v1[0]**2+v1[1]**2 == v2[0]**2+v2[1]**2) and p1!=p2!=p3!=p4
复杂度
- 时间复杂度: O ( 1 ) O(1) O(1)
- 空间复杂度: O ( 1 ) O(1) O(1)
边栏推荐
- leetcode链表专题
- How to Improve Embedded Programming with MISRA
- What is the difference between the legendary server GOM engine and the GEE engine?
- plsql连接oracle使用完毕之后关闭问题
- IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一
- Hash table implementation code
- inner join 与 left join 之间的区别
- trivy如何从非关系型数据库查询数据
- Create and copy conda environment
- 1192. 奖金
猜你喜欢
随机推荐
一文搞懂JS的原型链
开放式耳机推荐哪款最好最实用、最好的开放式耳机推荐
【论文阅读】Anomaly Detection in Video via Self-Supervised and Multi-Task Learning
万字长文,揭秘华为数据治理体系!
grid的使用
手摸手写一个互联网黑话生成器
The core principles of electronic games
项目经理:不错啊!SSO单点登录代码写出来了,把时序图也画一下?
Children's programming electronics (graphical programming Scratch secondary level exam parsing (choice) in June 2022
线程池面试汇总
如何使用MISRA改进嵌入式编程
frp-免费内网穿透
164. 可达性统计
Vscode builds ESP32-C3 development environment
新来技术总监:谁在用 isXxx 形式定义布尔类型,明天不用来了!
[Numpy] np.select
大一(下)暑假作业
在金融服务行业数字化转型中,低代码值得被关注
企业代码安全防护分类
码蹄集 tourist









