当前位置:网站首页>LeetCode·每日一题·593.有效的正方形·数学
LeetCode·每日一题·593.有效的正方形·数学
2022-07-29 14:35:00 【小迅想变强】
链接:https://leetcode.cn/problems/valid-square/solution/by-xun-ge-v-ct2g/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目

示例

思路
解题思路
感觉在写初中数学题。。。。。。。
题目需要我们判断任意四点是否为正方形,先得知道正方形的基本判定定理:
- 对角线互相垂直平分且相等的四边形是正方形。
- 邻边相等且有一个内角是直角的平行四边形是正方形。
- 有一组邻边相等的矩形是正方形。
- 有一个内角是直角的菱形是正方形。
- 对角线相等的菱形是正方形。
- 对角线互相垂直的矩形是正方形。
- 有三个内角为直角且有一组邻边相等的四边形是正方形。
判别正方形的一般顺序:先说明它是平行四边形;再说明它是菱形(或矩形);最后说明它是矩形(或菱形)。
具体实现
先将四个点之间的长度求出,求任意两点之间的距离公式为

两点之间距离,可以不开根号,因为我们保持所有长度的比较都是带平方的比较
当边长相等且对角线相等时可以判断为正方形,当然也可以用勾股定理判断任意两条边与对角线是否构成a^2+b^2=c^2,这里使用简单比较,四边相等可以判断为菱形,对角线相等可以判断为矩形,同时满足这两个条件的只有正方形 利用判定定理5
代码
long len(int a, int b){
return (long)(a*a + b*b);//两点之间距离的平方,可以不开根号,因为所有长度的比较都是带平方的
}
int cmp(const void *a, const void*b){
return *(long*)a - *(long*)b;
}
/*
*给定任意四个点判断是否为正方形
*/
bool validSquare(int* p1, int p1Size, int* p2, int p2Size, int* p3, int p3Size, int* p4, int p4Size){
long tmp[6];
tmp[0] = len(p1[0]-p2[0], p1[1]-p2[1]);
tmp[1] = len(p1[0]-p3[0], p1[1]-p3[1]);
tmp[2] = len(p1[0]-p4[0], p1[1]-p4[1]);
tmp[3] = len(p2[0]-p3[0], p2[1]-p3[1]);
tmp[4] = len(p2[0]-p4[0], p2[1]-p4[1]);
tmp[5] = len(p3[0]-p4[0], p3[1]-p4[1]);
qsort(tmp, 6, sizeof(long), cmp);//升序处理
if(tmp[0] == 0) return false;//其中有边长为0,说明有任意两个点重合了
if(tmp[0] == tmp[1] && tmp[0] == tmp[2] && tmp[0]== tmp[3] && tmp[4] == tmp[5]) return true;//当边长相等且对角线相等时可以判断为正方形,当然也可以用勾股定理判断任意两条边与对角线是否构成a^2+b^2=c^2,这里使用简单比较,四边相等可以判断为菱形,对角线相等可以判断为矩形,同时满足这两个条件的只有正方形 5. **对角线相等的菱形是正方形。**
return false;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/valid-square/solution/by-xun-ge-v-ct2g/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。时间空间复杂度

边栏推荐
- 【表达式计算】表达式计算问题的通用解法(练习加强版,含总结)
- 深陷盈利困境,“寒冬”中也要二次递表,北森上市迫切
- Based on domestic, link global | schneider electric "industrial SI alliance partners hand in hand" to the industry in the future
- 【Postman】Download and installation (novice graphic tutorial)
- 微服务实战|集中配置中心Config非对称加密与安全管理
- 【LeetCode】1. 两数之和
- 广州市应急管理局发布夏季危化品十大安全风险
- 求教一下 现在最新版的flinkcdc能获取到oracle的ddl变更信息吗?
- redis常见面试题(背诵篇)
- 2022杭电多校第三场
猜你喜欢
随机推荐
How to get local json
交叉编译工具链的安装和配置过程
微服务实战|集中配置中心Config非对称加密与安全管理
一篇适合新手的深度学习综述!
ArcGIS Pro与ArcGis区别
【左连接】坑点
三 RedisTemplate 序列化机制配置实战
基于JSP&Servlet实现的众筹平台系统
Numpy
数字孪生万物可视 |联接现实世界与数字空间
自定义fingerprint特征
Uni drop-down selection menu function/lazy loading images
第十九届同济大学程序设计竞赛暨高校网络友谊赛 G-归零(可持久化权值线段树)
Generate Class bytecode files with Asm
兆骑科创赛事活动承办,项目路演,人才引进平台
【 LeetCode 】 88. Merging two orderly array
字典树笔记(自用)
AQS源码阅读与强软弱虚4种引用以及ThreadLocal原理与源码
Interfaces and Abstractions
MySQL 是如何实现 ACID 的?









