Algorithm做算法题,Review点评英文文章,Tip总结技术技巧,Share做技术分享。每周打卡一次,这就是ARTS打卡。
1. 做算法题
LeetCode593题. 有效的正方形
题目描述:
给定二维空间中四点的坐标,返回四点是否可以构造一个正方形。
一个点的坐标(x,y)由一个有两个整数的整数数组表示。
示例:
输入: p1 = [0,0], p2 = [1,1], p3 = [1,0], p4 = [0,1]
输出: True
注意:
所有输入整数都在 [-10000,10000] 范围内。
一个有效的正方形有四个等长的正长和四个等角(90度角)。
输入点没有顺序。
**解题思路:**从两个点坐标可以得到两点连线的向量,如p1p2_v = [p2[0] - p1[0], p2[1] - p1[1]]
,向量之间的内积为0可以判断是否两边夹角直角,向量的长度可判断两边长度是否相等。注意要排除共点情况(向量长度为0)。
解题代码:
class Solution:
def validSquare(self, p1: List[int], p2: List[int], p3: List[int], p4: List[int]) -> bool:
p1p2_v = [p2[0] - p1[0], p2[1] - p1[1]]
p1p3_v = [p3[0] - p1[0], p3[1] - p1[1]]
p1p4_v = [p4[0] - p1[0], p4[1] - p1[1]]
p4p2_v = [p4[0] - p2[0], p4[1] - p2[1]]
p4p3_v = [p4[0] - p3[0], p4[1] - p3[1]]
p3p2_v = [p2[0] - p3[0], p2[1] - p3[1]]
p3p4_v = [p4[0] - p3[0], p4[1] - p3[1]]
p2p3_v = [p3[0] - p2[0], p3[1] - p2[1]]
p2p4_v = [p4[0] - p2[0], p4[1] - p2[1]]
if (p1p2_v[0] * p1p3_v[0] + p1p2_v[1] * p1p3_v[1]) == 0:
if (p4p2_v[0] * p4p3_v[0] + p4p2_v[1] * p4p3_v[1]) == 0 and p1p2_v[0]*p1p2_v[0] + p1p2_v[1]*p1p2_v[1] == p1p3_v[0]*p1p3_v[0] + p1p3_v[1]*p1p3_v[1] and p1p2_v[0]*p1p2_v[0] + p1p2_v[1]*p1p2_v[1] > 0 and p3p4_v[0]*p3p4_v[0] + p3p4_v[1]*p3p4_v[1]>0:
return True
elif (p1p2_v[0] * p1p4_v[0] + p1p2_v[1] * p1p4_v[1]) == 0:
if (p3p2_v[0] * p3p4_v[0] + p3p2_v[1] * p3p4_v[1]) == 0 and p1p2_v[0]*p1p2_v[0] + p1p2_v[1]*p1p2_v[1] == p1p4_v[0]*p1p4_v[0] + p1p4_v[1]*p1p4_v[1] and p1p2_v[0]*p1p2_v[0] + p1p2_v[1]*p1p2_v[1]>0 and p3p4_v[0]*p3p4_v[0] + p3p4_v[1]*p3p4_v[1]>0:
return True
elif (p1p3_v[0] * p1p4_v[0] + p1p3_v[1] * p1p4_v[1]) == 0:
if (p2p3_v[0] * p2p4_v[0] + p2p3_v[1] * p2p4_v[1]) == 0 and p1p3_v[0]*p1p3_v[0] + p1p3_v[1]*p1p3_v[1] == p1p4_v[0]*p1p4_v[0] + p1p4_v[1]*p1p4_v[1] and p1p2_v[0]*p1p2_v[0] + p1p2_v[1]*p1p2_v[1]>0 and p3p4_v[0]*p3p4_v[0] + p3p4_v[1]*p3p4_v[1]>0:
return True
return False
2.点评英文文章
TED演讲The first 20 hours—how to learn anything介绍了快速学习新技能的有效方法。一万小时定律已经深入人心,成为某个领域的专家需要一万小时的专注练习。一万小时意味着每天全身心投入,至少要5年时间才能成为专家,很高的一座大山。这个TED演讲者介绍说进入一个新的领域达到一定水平不需要那么就,20小时就够了。演讲者给出了具体的方法,而且现场表演了学习20小时后弹奏乌克里里,对于外行来看,他的演奏水平已经达到了独立伴奏的水平。
3. 技术技巧
正则表达式博大精深,稍微复杂一点就容易把人绕晕。regexper](https://regexper.com/)是一个图形化展示正则筛选过程的工具,输入正则表达式,自动生成筛选的逻辑,清晰明了。
4. 技术分享
项目管理开展中需要对问题跟进、指派、跟踪、闭环,如果靠项目管理人员手工记录、当面催促、推诿扯皮,存在信息不对称的问题。禅道是专业的研发项目管理软件,Windows下安装部署比较简单,可以快速启动服务。