当前位置:网站首页>力扣刷题之有效的正方形(每日一题7/29)
力扣刷题之有效的正方形(每日一题7/29)
2022-07-31 01:47:00 【兰舟千帆】
力扣刷题之有效的正方形(每日一题7/29)
本题我采用的完全的计算暴力。
题目地址如下
链接
题目要求如下
给定2D空间中四个点的坐标 p1, p2, p3 和 p4,如果这四个点构成一个正方形,则返回 true 。
点的坐标 pi 表示为 [xi, yi] 。输入 不是 按任何顺序给出的。
一个 有效的正方形 有四条等边和四个等角(90度角)。
来源:力扣(LeetCode)
这是基本的要求。其实呢!提示我也没有去用,因为我采用的是完全的纯数学计算,用到了坐标的特点。比较暴力,代码快大,但是效率就是高。
下面是我的代码
class Solution {
public boolean validSquare(int[] p1, int[] p2, int[] p3, int[] p4) {
boolean result = judge_finally(p1,p2,p3,p4);
return result;
}
public static boolean judge_finally(int[]p1,int[]p2,int[]p3,int[]p4) {
double v_1_2 = judge_rhomb(p1, p2);//这里计算了一些可能用到的距离
double v2_3 = judge_rhomb(p2, p3);
double v3_4 = judge_rhomb(p3, p4);
double v1_4 = judge_rhomb(p1, p4);
double v_2_4 = judge_rhomb(p2, p4);
double v_1_3 = judge_rhomb(p1, p3);
//这里列出了可能构成的对角线,并作出对角线的判断,包括四点对角线中点重合,确认四边形
//距离相等以及对角线垂直约束。这样就逐步约束为正方形
//注意约束零点坐标,所以必须做一个约束,这里约束了对角线距离不为0
if (v_1_3 == v_2_4 && v_1_3 != 0&&judge_vertical(p1, p3, p2, p4)&judge_if_line(p1,p3,p2,p4)) {
return true;
}
if (v1_4 == v2_3 && v1_4 != 0&&judge_vertical(p1, p4, p2, p3)&judge_if_line(p1,p4,p2,p3)) {
return true;
}
if (v_1_2 == v3_4 && v_1_2 != 0&&judge_vertical(p1, p2, p3, p4)&judge_if_line(p1,p2,p3,p4)) {
return true;
}
return false;
}
public static double judge_rhomb(int[]a,int[]b)//计算两坐标构成线的长度
{
double x1 = ( Math.pow(a[0]-b[0],2)+Math.pow(a[1]-b[1],2));
return x1;
}
public static boolean judge_vertical(int[]a,int[]b,int[]c,int[]d)//判断直角
{
int v[] = {
a[0]-b[0],a[1]-b[1]};
int v1[] = {
c[0]-d[0],c[1]-d[1]};
return v[0]*v1[0]+v[1]*v1[1]==0;
}
public static boolean judge_if_line(int[]a,int[]b,int[]c,int[]d)//判断四点能否构成平行四边形
//如果四点可以构成平行四边形,则对角线中点重合
{
boolean bool_line_ = a[0] + b[0] == c[0] + d[0];
boolean bool_line__ = a[1]+b[1]==c[1]+d[1];
if (bool_line_&&bool_line__)
{
return true;
}
return false;
}
}
归结方法,很基础的方法
调用判断。这里的垂直用到了向量的特点。
x1x2+y1y2=0,这样就可以判断是否垂直。
对坐标四点判断是否构成平行四边形,需要判断对可能情况的对角线的中点是否重合,那么这里只要分别计算横纵坐标死否分别相等就行。
菱形的对角线是互相垂直平分的,我们只要在让它的对角线相等,就可以判断为正方形。但是要注意做这些给出的坐标约束。所以我给了对角线长度不为0。因为如果四个点的横纵坐标都为0的话,上面的要求其实是都可以满足的。
完全的对对角线的约束。
边栏推荐
- rpm install postgresql12
- 软件测试缺陷报告---定义,组成,缺陷的生命周期,缺陷跟踪产后处理流程,缺陷跟踪处理流程,缺陷跟踪的目的,缺陷管理工具
- Installation problem corresponding to tensorflow and GPU version
- C language _ structure pointer array function voting system
- leetcode-128: longest continuous sequence
- JPEG Steganalysis of Digital Image Steganography
- 软件测试工作3年了,谈谈我是如何从刚入门进阶到自动化测试的?
- VSCode插件:嵌套注释
- MySQL的分页你还在使劲的limit?
- 1782. Count the number of point pairs Double pointer
猜你喜欢
System design. Short chain system design
1782. 统计点对的数目 双指针
Kyushu cloud as cloud computing standardization excellent member unit
Maximum monthly salary of 20K?The average salary is nearly 10,000... What is the experience of working in a Huawei subsidiary?
勾股数元组 od js
Google官方控件ShapeableImageView使用
GCC Rust is approved to be included in the mainline code base, or will meet you in GCC 13
Can an inexperienced college graduate switch to software testing?my real case
观察者(observer)模式(一)
JS逆向之浏览器补环境(一)
随机推荐
I have been working in software testing for 3 years, how did I go from just getting started to automated testing?
内网渗透——提权
手把手教你配置Jenkins自动化邮件通知
Can an inexperienced college graduate switch to software testing?my real case
初识C语言 -- 数组
仿牛客网项目总结
1.非类型模板参数 2.模板的特化 3.继承讲解
What are the project management tools like MS Project
TiDB 在长银五八消费金融核心系统适配经验分享
TiDB之rawkv升级之路v5.0.4-->v6.1.0
tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现
Centos 7.9 install PostgreSQL14.4 steps
[Map and Set] LeetCode & Niu Ke exercise
力扣每日一题-第46天-704. 二分查找
【微信小程序】一文带你了解数据绑定、事件绑定以及事件传参、数据同步
Centos 7.9安装PostgreSQL14.4步骤
Xiaohei's leetcode journey: 117. Fill the next right node pointer of each node II
TiDB 操作实践 -- 备份与恢复
uniapp使用第三方字体
System design. Short chain system design