C#刷遍Leetcode面试题系列连载(5):No.593 - 有效的正方形
2021-05-18 05:30
标签:har 通过 问题 国内 观点 var 之间 vat tps 上一篇 LeetCode 面试题中,我们分析了一道难度为 Easy 的数学题 - 自除数,提供了两种方法。今天我们来分析一道难度为 Medium 的面试题。 传送门:https://enjoy233.cnblogs.com/articles/leetcode_csharp_index.html 今天要给大家分析的面试题是 LeetCode 上第 593 号问题, LeetCode - 593. 有效的正方形 https://leetcode-cn.com/problems/valid-square 给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。 一个点的坐标(x,y)由一个有两个整数的整数数组表示。 示例: 注意: 题目难度:中等 通过次数:1.9K 提交次数:4.7K 贡献者:LeetCode 相关标签 数学 https://leetcode-cn.com/tag/math 可以基于正方形的特征来判断~ 方法1: 由于点是以坐标形式给出的,于是可以围绕向量垂直以及对角线长度的平方为边长的 2 倍来做. 而向量垂直地判定依据是向量点乘的乘积为0)。 方法2: 判断4条边完全相等. 临界情况: 4个输入的点中有两个或多个相同,直接返回false。 方法1 已AC代码: 执行用时: 方法2 已AC代码: 执行用时: 欢迎提出更佳的解决思路~ 作者简介:Bravo Yeung,计算机硕士,知乎干货答主(获81K 赞同, 38K 感谢, 235K 收藏)。曾在国内 Top3互联网视频直播公司工作过,后加入一家外企做软件开发至今。 如需转载,请加微信 iMath7 申请开白! 欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。 欢迎各位读者加入 .NET技术交流群,在公众号后台回复“加群”或者“学习”即可。 微信后台回复“asp”,给你:一份全网最强的ASP.NET学习路线图。 回复“cs”,给你:一整套 C# 和 WPF 学习资源! 回复“core”,给你:2019年dotConf大会上发布的.NET core 3.0学习视频! C#刷遍Leetcode面试题系列连载(5):No.593 - 有效的正方形 标签:har 通过 问题 国内 观点 var 之间 vat tps 原文地址:https://www.cnblogs.com/enjoy233/p/csharp_leetcode_series_5.html系列教程索引
题目描述
输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
输出: True
解题思路:
public class Solution
{
public bool ValidSquare(int[] p1, int[] p2, int[] p3, int[] p4)
{
int[] vect1 = { p2[0] - p1[0], p2[1] - p1[1] };
int[] vect2 = { p4[0] - p1[0], p4[1] - p1[1] };
int[] vect3 = { p3[0] - p1[0], p3[1] - p1[1] };
List
104 ms
, 在所有 csharp 提交中击败了80.00%
的用户.public class Solution
{
public bool ValidSquare(int[] p1, int[] p2, int[] p3, int[] p4)
{
if (GetLenSquare(p1, p2) == 0 || GetLenSquare(p2, p3) == 0 || GetLenSquare(p3, p4) == 0 || GetLenSquare(p1, p4) == 0)
return false;
return GetLenSquare(p1, p2) == GetLenSquare(p3, p4) && GetLenSquare(p1, p3) == GetLenSquare(p2, p4) && GetLenSquare(p1, p4) == GetLenSquare(p2, p3) &&
(GetLenSquare(p1, p2) == GetLenSquare(p1, p3) || GetLenSquare(p1, p2) == GetLenSquare(p1, p4) || GetLenSquare(p1, p3) == GetLenSquare(p1, p4));
}
private int GetLenSquare(int[] point1, int[] point2) => (point2[0] - point1[0]) * (point2[0] - point1[0]) +
(point2[1] - point1[1]) * (point2[1] - point1[1]);
}
108 ms
, 在所有 csharp 提交中击败了80.00%
的用户.
文末彩蛋
文章标题:C#刷遍Leetcode面试题系列连载(5):No.593 - 有效的正方形
文章链接:http://soscw.com/index.php/essay/87056.html