• LeetCode·每日一题·593.有效的正方形·数学


    链接:https://leetcode.cn/problems/valid-square/solution/by-xun-ge-v-ct2g/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 

    题目

     

    示例

     

    思路

    解题思路
    感觉在写初中数学题。。。。。。。
    题目需要我们判断任意四点是否为正方形,先得知道正方形的基本判定定理:

    1. 对角线互相垂直平分且相等的四边形是正方形。
    2. 邻边相等且有一个内角是直角的平行四边形是正方形。
    3. 有一组邻边相等的矩形是正方形。
    4. 有一个内角是直角的菱形是正方形。
    5. 对角线相等的菱形是正方形。
    6. 对角线互相垂直的矩形是正方形。
    7. 有三个内角为直角且有一组邻边相等的四边形是正方形。

    判别正方形的一般顺序:先说明它是平行四边形;再说明它是菱形(或矩形);最后说明它是矩形(或菱形)。

    具体实现
    先将四个点之间的长度求出,求任意两点之间的距离公式为

     

    两点之间距离,可以不开根号,因为我们保持所有长度的比较都是带平方的比较
    当边长相等且对角线相等时可以判断为正方形,当然也可以用勾股定理判断任意两条边与对角线是否构成a^2+b^2=c^2,这里使用简单比较,四边相等可以判断为菱形,对角线相等可以判断为矩形,同时满足这两个条件的只有正方形 利用判定定理5

    代码

    1. long len(int a, int b){
    2. return (long)(a*a + b*b);//两点之间距离的平方,可以不开根号,因为所有长度的比较都是带平方的
    3. }
    4. int cmp(const void *a, const void*b){
    5. return *(long*)a - *(long*)b;
    6. }
    7. /*
    8. *给定任意四个点判断是否为正方形
    9. */
    10. bool validSquare(int* p1, int p1Size, int* p2, int p2Size, int* p3, int p3Size, int* p4, int p4Size){
    11. long tmp[6];
    12. tmp[0] = len(p1[0]-p2[0], p1[1]-p2[1]);
    13. tmp[1] = len(p1[0]-p3[0], p1[1]-p3[1]);
    14. tmp[2] = len(p1[0]-p4[0], p1[1]-p4[1]);
    15. tmp[3] = len(p2[0]-p3[0], p2[1]-p3[1]);
    16. tmp[4] = len(p2[0]-p4[0], p2[1]-p4[1]);
    17. tmp[5] = len(p3[0]-p4[0], p3[1]-p4[1]);
    18. qsort(tmp, 6, sizeof(long), cmp);//升序处理
    19. if(tmp[0] == 0) return false;//其中有边长为0,说明有任意两个点重合了
    20. 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. **对角线相等的菱形是正方形。**
    21. return false;
    22. }
    23. 作者:xun-ge-v
    24. 链接:https://leetcode.cn/problems/valid-square/solution/by-xun-ge-v-ct2g/
    25. 来源:力扣(LeetCode)
    26. 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    时间空间复杂度

     

  • 相关阅读:
    论文阅读笔记 | 三维目标检测——SECOND算法
    __declspec(dllimport)
    计算机网络第四章——网络层(末)
    黑马瑞吉外卖之过滤器后台登录验证(详细笔记说明)
    Windows10 任务栏卡死
    C语言文件操作
    Google zxing 生成带logo的二维码图片
    助听器不仅能帮你听到,还有另外一个功能……
    mybatis嵌套查询子集合只有一条数据
    冒泡排序超详细讲解C语言
  • 原文地址:https://blog.csdn.net/m0_64560763/article/details/126051451