• 入门力扣自学笔记107 C++ (题目编号593)


    593. 有效的正方形

    题目:

    给定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


    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/valid-square
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


    思路:

    为了简化解题步骤,应该只针对一种属性进行判断。

    从边来说,四边相等且两对角线相等且对角线长为边长的/sqrt{2}倍
    从角来说,四边夹角与两对角线夹角均为90°
    但从编写难易程度来说,选用边判断比较方便。

    既是菱形又是矩形的图形是正方形,菱形的四条边相等,矩形对角线相等,那么只要求出六条边的长度即可。


    代码:

    1. class Solution {
    2. public:
    3. static bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4)
    4. {
    5. map<int, int> lengths; /*以长度为key,该长度出现的次数为value*/
    6. int longest = INT_MIN, shortest = INT_MAX;
    7. vectorint>> edges; /*方便求边长的简单处理*/
    8. edges.emplace_back(p1);
    9. edges.emplace_back(p2);
    10. edges.emplace_back(p3);
    11. edges.emplace_back(p4);
    12. for (int i = 0; i < 3; ++i)
    13. for (int j = i + 1; j < 4; ++j)
    14. {
    15. int x_diff = edges[i][0] - edges[j][0]; /*求横坐标的差*/
    16. int y_diff = edges[i][1] - edges[j][1]; /*求纵坐标的差*/
    17. int length = abs(x_diff * x_diff) + abs(y_diff * y_diff); /*为了避免精度问题,这里取距离的平方*/
    18. longest = max(longest, length); /*保存可能的对角线长*/
    19. shortest = min(shortest, length); /*保存可能的边长*/
    20. ++lengths[length];
    21. }
    22. if (lengths[shortest] == 4 && lengths[longest] == 2 && longest== 2 * shortest) return true;
    23. /*只有四边相等&&两对角线相等&&对角线长度平方为边长平方之两倍时,才是正方形*/
    24. else return false;
    25. }
    26. };

  • 相关阅读:
    【React扩展】2、PureComponent、ErrorBoundary、render props和组件通信方式总结
    聊聊pert图的那些事儿~
    中级JAVA程序员应该掌握的数据结构知识
    Selenium特殊场景问题汇总
    设计模式 - 行为型模式考点篇:策略模式(概述 | 案例实现 | 优缺点 | 使用场景)
    机器学习基础算法应用实践案例整理
    【PHP】如何关闭buffer实时输出内容到前端
    Kafka消息存储
    教你自己搭建一个IP池(绝对超好用!!!!)
    校招失败后,在小公司熬了 2 年终于进了华为,竭尽全力....
  • 原文地址:https://blog.csdn.net/DK_Sorhic/article/details/126050211