当前位置:网站首页>力扣刷题之有效的正方形(每日一题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的话,上面的要求其实是都可以满足的。
完全的对对角线的约束。
边栏推荐
猜你喜欢

Meta元宇宙部门第二季度亏损28亿 仍要继续押注?元宇宙发展尚未看到出路

最高月薪20K?平均薪资近万...在华为子公司工作是什么体验?

MySQL (6)

Can an inexperienced college graduate switch to software testing?my real case

tkinter模块高级操作(二)—— 界面切换效果、立体阴影字效果及gif动图的实现

Kyushu cloud as cloud computing standardization excellent member unit

VSCode Plugin: Nested Comments

【genius_platform软件平台开发】第七十四讲:window环境下的静态库和动态库的一些使用方法(VC环境)

leetcode-1161:最大层内元素和

case语句的综合结果,你究竟会了吗?【Verilog高级教程】
随机推荐
Programmer's debriefing report/summary
934. 最短的桥
MySql installation and configuration super detailed tutorial and simple method of building database and table
九州云获评云计算标准化优秀成员单位
GCC Rust is approved to be included in the mainline code base, or will meet you in GCC 13
CV-Model【3】:MobileNet v2
[WeChat applet] This article takes you to understand data binding, event binding, event parameter transfer, and data synchronization
【AcWing 第62场周赛】
TiCDC 架构和数据同步链路解析
After reading "MySQL Database Advanced Practice" (SQL Xiao Xuzhu)
link与@import的区别
Know what DTU is 4GDTU equipment
Fiddler抓包模拟弱网络环境测试
Analyze the capabilities and scenarios of the cloud native message flow system Apache Pulsar
《云原生的本手、妙手和俗手》——2022全国新高考I卷作文
leetcode-128:最长连续序列
【flask入门系列】Flask-SQLAlchemy的使用
Ticmp - 更快的让应用从 MySQL 迁移到 TiDB
数字图像隐写术之JPEG 隐写分析
I have been working in software testing for 3 years, how did I go from just getting started to automated testing?