当前位置:网站首页>【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)
边栏推荐
猜你喜欢
即时通讯场景下安全合规的实践和经验
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
The Location object of BOM series
线程池拒绝策略详解
蚂蚁三面滑铁卢!遭分布式截胡,靠这些笔记潜修30天,挺进京东
程序员是职业病高发群体,别天真的以为只有秃头那么简单,才不是呢。
TAP 文章系列-10 | 从应用感知能力谈 TAP 的约定服务
【MySQL】ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘
MySQL基础篇(三)-- 数据类型
164. 可达性统计
随机推荐
PAT 甲级 A1021 Deepest Root
阿里巴巴 CTO 程立:开源是基础软件的源头!
在金融服务行业数字化转型中,低代码值得被关注
164. 可达性统计
hash table 实现代码
小程序开发模板设计怎么做?
少儿编程 电子学会图形化编程等级考试Scratch二级真题解析(选择题)2022年6月
inner join 与 left join 之间的区别
深度解析C语言文件操作以及常见问题
Vscode builds ESP32-C3 development environment
Gee engine modification UI interface graphic tutorial
479-82(54、11)
【微信小程序】全局配置
The new technical director, who is in the form of a isXxx Boolean type definition, tomorrow need not come!
IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一
电子游戏的核心原理
Still developing SMS verification code login?Try it (one-click login with your phone number)
frp-免费内网穿透
开关电源-LLC基本原理
plsql连接oracle使用完毕之后关闭问题