来源:力扣(LeetCode)

描述:

给定2D空间中四个点的坐标 p1, p2, p3p4,如果这四个点构成一个正方形,则返回 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

方法:数学

思路与算法

正方形判定定理是几何学里用于判定一个四边形是否为正方形的判定定理。判别正方形的一般顺序为先说明它是平行四边形;再说明它是菱形(或矩形);最后说明它是矩形(或菱形)。那么我们可以从枚举四边形的两条斜边入手来进行判断:

  1. 如果两条斜边的中点相同:则说明以该两条斜边组成的四边形为「平行四边形」。
  2. 在满足「条件一」的基础上,如果两条斜边的长度相同:则说明以该两条斜边组成的四边形为「矩形」。
  3. 在满足「条件二」的基础上,如果两条斜边的相互垂直:则说明以该两条斜边组成的四边形为「正方形」。

代码:

class Solution {public:bool checkLength(vector<int>& v1, vector<int>& v2) {return (v1[0] * v1[0] + v1[1] * v1[1]) == (v2[0] * v2[0] + v2[1] * v2[1]);}bool checkMidPoint(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {return (p1[0] + p2[0]) == (p3[0] + p4[0]) && (p1[1] + p2[1]) == (p3[1] + p4[1]);}int calCos(vector<int>& v1, vector<int>& v2) {return (v1[0] * v2[0] + v1[1] * v2[1]) == 0;}bool help(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {vector<int> v1 = {p1[0] - p2[0], p1[1] - p2[1]};vector<int> v2 = {p3[0] - p4[0], p3[1] - p4[1]};if (checkMidPoint(p1, p2, p3, p4) && checkLength(v1, v2) && calCos(v1, v2)) {return true;} return false;}bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {if (p1 == p2) {return false;}if (help(p1, p2, p3, p4)) {return true;}if (p1 == p3) {return false;}if (help(p1, p3, p2, p4)) {return true;}if (p1 == p4) {return false;}if (help(p1, p4, p2, p3)) {return true;}return false;}
};

执行用时:4 ms, 在所有 C++ 提交中击败了75.76%的用户
内存消耗:25.8 MB, 在所有 C++ 提交中击败了69.97%的用户
复杂度分析
时间复杂度:O(1)。
空间复杂度:O(1),仅使用常数变量。

【593. 有效的正方形】相关推荐

  1. LeetCode - 593 有效的正方形

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 数学公式求解 题目来源 593. 有效的正方形 - 力扣(LeetCode) 题目描述 给定2D空间中四个点的坐标 p1, p2, p3 和  ...

  2. leetcode 593. Valid Square | 593. 有效的正方形(Java)

    题目 https://leetcode.com/problems/valid-square/ 题解 因为顺序未知,所以可能有四种组合情况.(check时,以四个点顺时针排列为待判断的正方形) clas ...

  3. LeetCode 593. 有效的正方形(数学)

    1. 题目 给定二维空间中四点的坐标,返回四点是否可以构造一个正方形. 一个点的坐标(x,y)由一个有两个整数的整数数组表示. 示例: 输入: p1 = [0,0], p2 = [1,1], p3 = ...

  4. LeetCode 593. 有效的正方形

    解题思路: 数学方法 正方形判定定理 正方形判定定理是几何学里用于判定一个四边形是否为正方形的判定定理.判别正方形的一般顺序为先说明它是平行四边形:再说明它是菱形(或矩形):最后说明它是矩形(或菱形) ...

  5. C#刷遍Leetcode面试题系列连载(6):No.372 - 超级次方

    点击蓝字"dotNET匠人"关注我哟 加个"星标★",每日 7:15,好文必达! 前文传送门: C# 刷遍 Leetcode 面试题系列连载(1) - 入门与工 ...

  6. C#LeetCode刷题-数学

    数学篇 # 题名 刷题 通过率 难度 2 两数相加 29.0% 中等 7 反转整数 C#LeetCode刷题之#7-反转整数(Reverse Integer) 28.6% 简单 8 字符串转整数 (a ...

  7. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  8. leetcode算法练习 JavaScript实现

    leetcode 表格内容由spider.js从leetcode-cn.com爬取. 已做题目答案也从leetcode-cn.com中爬取并生成文件. 解题进度:已解决 140/637 - 简单 94 ...

  9. 【LeetCode】2022 7月 每日一题

    [LeetCode]2022 7月 每日一题 前言 七月太忙了,又是项目又是练车又是各种比赛.大概有10天的每日一题没有当天写完(虽然后面补上了). 将每日一题的所有思路记录在这里分享一下. 7.1 ...

最新文章

  1. Android10.0 开机广播BOOT_COMPLETED发送流程分析
  2. iOS地图定位(Map)
  3. 重磅开源人工智能大型场景草图数据集图像检索草图着色编辑和字幕
  4. PHP操作FTP类 (上传下载移动创建等)
  5. TestCenter中测试需求、测试用例、测试计划的评审方法
  6. 窗体皮肤ssk 跟背景图片冲突_一件靠谱的皮肤衣应该长什么样?
  7. Java编程技术_10个实用的但偏执的Java编程技术
  8. net core 通过js打印集合(创建树)
  9. 数据仓库与数据挖掘的OLAP技术----韩家炜教授的《数据挖掘概念与技术》学习笔记
  10. 三维空间平面和直线的夹角计算
  11. 民宿管理系统课程设计_民宿室内设计毕业设计
  12. win10防火墙删除的文件在哪里_【微软】第42期分享:微软 Win10 仍存在删除个人配置文件数据 Bug!...
  13. python配置geany教程视频_Python使用geany工具配置方法
  14. 客户旅程_编程如何找到我的:21岁开发人员的7年旅程
  15. opencv-python:16_形态学处理【二】(开操作、闭操作、形态学梯度、顶帽变换、黑帽变换,去除皮肤镜中的毛发噪音、cv2.morphologyEx())
  16. win7如何开启Telnet服务
  17. oracle查看表空间的序号,Oracle查询所有序列
  18. python信号降噪_EEG(P300)信号数据滤波降噪
  19. 数据安全-密码学常用技术(一)
  20. Windows下的wap应用,手机模拟测试工具

热门文章

  1. Lucas–Kanade光流算法
  2. RCK127硬齿面减速器的优势
  3. 压力测试实战,压力测试步骤压力测试数据 (史上最全最详细教程)
  4. 增长黑客读书笔记(七)留存:唤醒并留住用户
  5. java socket实现桌面右下角弹窗_java实现桌面右下角弹窗效果
  6. java 1.7 64下载_jre1.7 64位官方下载
  7. 医学影像入门知识——1. 坐标轴/方向
  8. 【微信公众号】3. 后台管理功能简介
  9. P2570 [ZJOI2010]贪吃的老鼠
  10. ubuntu 无线网卡 断网重连 教程