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

2023-10-13 07:20

本文主要是介绍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

代码

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

时间空间复杂度

 

这篇关于LeetCode·每日一题·593.有效的正方形·数学的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/201624

相关文章

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

uva 10025 The ? 1 ? 2 ? ... ? n = k problem(数学)

题意是    ?  1  ?  2  ?  ...  ?  n = k 式子中给k,? 处可以填 + 也可以填 - ,问最小满足条件的n。 e.g k = 12  - 1 + 2 + 3 + 4 + 5 + 6 - 7 = 12 with n = 7。 先给证明,令 S(n) = 1 + 2 + 3 + 4 + 5 + .... + n 暴搜n,搜出当 S(n) >=

uva 11044 Searching for Nessy(小学数学)

题意是给出一个n*m的格子,求出里面有多少个不重合的九宫格。 (rows / 3) * (columns / 3) K.o 代码: #include <stdio.h>int main(){int ncase;scanf("%d", &ncase);while (ncase--){int rows, columns;scanf("%d%d", &rows, &col

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &