当前位置:网站首页>【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)
边栏推荐
- 浅谈如何在渗透测试中快速搞定webshell
- 理解yolov7网络结构
- plsql连接oracle使用完毕之后关闭问题
- BGP联邦综合实验
- 企业需要知道的5个 IAM 最佳实践
- 1192. 奖金
- 计算机专业面试进阶指南
- The Advanced Guide to the Computer Professional Interview
- How to set the explosion rate of legendary humanoid?Humanoid increase tutorial
- Super young!34-year-old professor, vice president of 985 Ace College!
猜你喜欢

IJCAI 2022杰出论文公布,大陆作者中稿298篇拿下两项第一

电子游戏的核心原理

分布式事务方案

MLX90640 红外热成像仪测温传感器模块开发笔记(九)

程序员入门的第一个程序,打印输出 “ HelloWorld “

Research on the thinking and application methods of the frontier of ESI research

熊市下PLATO如何通过Elephant Swap,获得溢价收益?

HCIP第十三天笔记(BGP的路由过滤、BGP的社团属性、MPLS)

2022年七夕情人节有什么值得推荐的礼物选择?实用且高级礼物推荐

项目经理:不错啊!SSO单点登录代码写出来了,把时序图也画一下?
随机推荐
PAT 甲级 A1021 Deepest Root
MySQL基础篇(四)-- 数据表的基本操作
你真的会用Console.log吗?
1191. 家谱树
在金融服务行业数字化转型中,低代码值得被关注
【论文阅读】异常检测的视频通过Self-Supervised和多任务学习
万字长文,揭秘华为数据治理体系!
mariadbackup物理备份使用——筑梦之路
企业需要知道的5个 IAM 最佳实践
带你了解一下PHP搭建的电商商城系统
连接oracle数据库指令
C#实现线程管理类
少儿编程 电子学会图形化编程等级考试Scratch二级真题解析(选择题)2022年6月
How to Improve Embedded Programming with MISRA
AI全流程开发难题破解之钥
Children's programming electronics (graphical programming Scratch secondary level exam parsing (choice) in June 2022
479-82(54、11)
leetcode134. 加油站
理解yolov7网络结构
企业代码安全防护分类