1. 题目

给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。

一个点的坐标(x,y)由一个有两个整数的整数数组表示。

示例:
输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
输出: True注意:
所有输入整数都在 [-10000,10000] 范围内。
一个有效的正方形有四个等长的正长和四个等角(90度角)。
输入点没有顺序。

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

2. 解题

  • 4个点可以组成6条边,最长的两条是对角线
  • 排序后,前4条边相等,后2条边对角线相等
class Solution { //C++
public:bool validSquare(vector<int>& p1, vector<int>& p2, vector<int>& p3, vector<int>& p4) {set<vector<int>> s;vector<vector<int>> p = {p1,p2,p3,p4};vector<int> d;for(auto& pi : p)s.insert(pi);if(s.size() < 4) return false;//有重合点for(int i = 0, j; i < 3; ++i)for(j = i+1; j < 4; ++j)d.push_back(dis(p[i][0],p[i][1],p[j][0],p[j][1]));sort(d.begin(), d.end());return (d[0]==d[1]) && (d[1]==d[2]) && (d[2]==d[3]) && (d[4]==d[5]);}int dis(int x1, int y1, int x2, int y2){return (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);}
};

0 ms 26.6 MB

class Solution:# py3def validSquare(self, p1: List[int], p2: List[int], p3: List[int], p4: List[int]) -> bool:p = [p1,p2,p3,p4]d = []s = set(tuple(pi) for pi in p)if len(s) < 4:return Falsedef dis(a,b,c,d):return (a-c)**2+(b-d)**2for i in range(3):for j in range(i+1, 4):d.append(dis(p[i][0],p[i][1],p[j][0],p[j][1]))d = sorted(d)return d[0]==d[1] and d[1]==d[2] and d[2]==d[3] and d[4]==d[5]

48 ms 13.8 MB

LeetCode 593. 有效的正方形(数学)相关推荐

  1. LeetCode - 593 有效的正方形

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

  2. LeetCode 593. 有效的正方形

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

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

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

  4. 【593. 有效的正方形】

    来源:力扣(LeetCode) 描述: 给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个点构成一个正方形,则返回 true . 点的坐标 pi 表示为 [xi, yi] .输入 ...

  5. LeetCode 473. 火柴拼正方形(回溯)

    文章目录 1. 题目 2. 解题 1. 题目 还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法. 不能折断火柴,可以把火柴连接起 ...

  6. LeetCode 441. 排列硬币(数学解方程)

    1. 题目 你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币. 给定一个数字 n,找出可形成完整阶梯行的总行数. n 是一个非负整数,并且在32位有符号整型的范围 ...

  7. LeetCode 396. 旋转函数(数学)

    1. 题目 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] ...

  8. [leetcode日记]221.最大正方形

    题目 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 输入: 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 输出: 4 ...

  9. leetcode算法题--最大正方形

    原题链接:https://leetcode-cn.com/problems/maximal-square/ 动态规划: dp[i][j]以(i,j)为右下角的正方形的边长 状态转移: dp[i][j] ...

最新文章

  1. oracle @spool,Oracle spool 用法小结
  2. oracle时间格式要注意的问题
  3. angr学习笔记(11)(SimProcedure)
  4. proe4.0安装教程
  5. 三个剩两个,两个剩一个,最后一个都没剩下。
  6. 一步步编写操作系统 62 函数调用约定
  7. Oracle bug 使用max或min函数into到一个char类型报字符缓冲区太小的错误
  8. 前端md转html添加样式_前端文档站点搭建方案
  9. java书籍_Java学习必备书籍(快来收藏)
  10. eggjs增删改查MySQL_egg-sequelize 实现 增删改查
  11. JS分页控件,可用于无刷新分页
  12. Oracle 11g 服务名称以及作用
  13. 同济大学高等数学上册电子版_同济大学版高等数学 第七版 上册 课本
  14. 三菱FX3UFX2NFX1N PLC 模拟器模拟通信功能,模拟PLC实体
  15. 数据挖掘实战—家用热水器用户行为分析与事件识别
  16. 基于python压缩gif图片大小。
  17. 廖雪峰老师个人网站推荐
  18. python字符串算式加减运算(Python字符串运算)
  19. 通达信l2数据接口如何开通?
  20. 行人重识别-姿态检测

热门文章

  1. python2.7无法使用pip(安装easy_install)
  2. AIML元素详细说明
  3. python选取特定行_pandas.DataFrame选取/排除特定行的方法
  4. java打印的globa类l_Spring异常集中处理和日志集中打印
  5. 小程序循环里做字符串拼接_昨天还在for循环里写加号拼接字符串的那个同事,今天已经不在了...
  6. activiti 工作流设置并行审批_activity、jbpm5、snakerflow常用工作流审批流对比
  7. makefile / CMake
  8. 解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题
  9. C#复习笔记(3)--C#2:解决C#1的问题(可空值类型)
  10. uC/OS-II源码分析(二)