Algorithm
本周的算法题为 1232. 缀点成线
给定一个数组 coordinates
,其中 coordinates[i] = [x, y]
, [x, y]
表示横坐标为 x
、纵坐标为 y
的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。
示例 1:
输入:coordinates = [[1,2],[2,3],[3,4],[4,5],[5,6],[6,7]]
输出:true
实现代码如下:
const checkStraightLine = function (coordinates) {
// 两点确定一条直线
if (coordinates.length < 2) {
return false;
}
// 同一个X轴
const allEqualX = coordinates.every((item) => item[0] === coordinates[0][0]);
if (allEqualX) {
return true;
}
// 同一个Y轴
const allEqualY = coordinates.every((item) => item[1] === coordinates[0][1]);
if (allEqualY) {
return true;
}
// 对角线
const [x0, y0] = coordinates[0];
const [x1, y1] = coordinates[1];
// 斜率
const slope = (y1 - y0) / (x1 - x0);
// 遍历剩余的坐标点,检查斜率是否一致
for (let i = 2; i < coordinates.length; i++) {
const [xi, yi] = coordinates[i];
// 避免除以零,并且使用交叉乘积来比较斜率
if ((yi - y0) * (x1 - x0) !== (y1 - y0) * (xi - x0)) {
return false;
}
}
return true;
};
解题思路:
首先,我们明确需求,即判断一组点是否都在同一直线上。这包括三种情况:所有点的X轴坐标相同、所有点的Y轴坐标相同,或者是这些点构成一条斜线。我们可以使用every
方法遍历数组中的点,对比它们的X轴或Y轴坐标是否相同。
接下来,对于斜线的判断,我们需要验证这些点的斜率是否一致。如果直接计算斜率 (yi - y0) / (xi - x0)
并与另一个斜率 (y2 - y1) / (x2 - x1)
进行比较,而 x2 - x1
为0时,会遇到除零错误或浮点数精度问题。为了避免这些问题,我们可以使用交叉乘积的方法,即两边同时乘以 (xi - x0) * (x2 - x1)
,从而得到 (yi - y0) * (x1 - x0) == (y1 - y0) * (xi - x0)
作为斜率是否相等的判断条件。
Review
Spanish residents take to streets against mass tourism - Breaking News English Lesson
西班牙成千上万的人正在抗议大众旅游。在巴塞罗那,居民们用水枪向餐馆里的游客喷射。在马略卡岛上,一万人走上街头,手举横幅,上面写着:“够了!”和“马略卡不出售!”马略卡岛的人们对他们的租金上涨感到愤怒。由于旅游业的发展,当地人几乎无法购买房屋。由于公司正在购买房产以租给游客,房价飙升。Airbnb的一位发言人说:“旅游业从业者无法在自己所在的城市负担得起租金。”她补充说:“我们认为将经济……建立在……旅游业之上是不可持续的,必须改变。” 旅游区的居民有很多抱怨。他们说旅游对他们的生活产生了负面影响。许多人再也找不到住的地方了。一些人不得不搬出家园,因为房东正在提高租金。日常生活也成了问题。公交车和火车上挤满了背包客和拉着行李箱的游客。由于垃圾不断增加,城镇很难保持街道清洁。当地人也抱怨说,由于游客,他们无法在自己喜欢的餐馆吃饭。西班牙并不是唯一一个旅游业成为问题的国家。日本、奥地利和墨西哥已经采取行动,寻求在帮助当地人和可持续旅游业之间找到平衡。
Tip
<img>
动态修改图片颜色
在实现el-menu
动态配置菜单图标的时候,因为从字体图标替换成在线获取的.svg
图片,所以需要研究下如何实现动态配置颜色,好解决后续各项目不同主题的需求。
transform: translateX(-80px);
filter: drop-shadow(#a80f0f 80px 0);
Share
《独家专访亚马逊 CTO Werner Vogels | InfoQ》
-
各种商业机构和教育平台都能帮我们快速掌握新的编程语言,所以到底选择哪种语言本身已经不那么重要了。 -
由于技术发展太过迅速,高等教育、大学课程根本就跟不上变化。问问那些刚刚走出校园的学生就知道了,他们对区块链、生成式 AI 等新技术的了解肯定不如我们这些从业者。而且随着技术的采用周期越来越短,产品的上市速度也会远超以往。也就是说,学校里传授的知识不再具有先进性。所以除了编程语言之外,我们在学校中的最大收获就是学习能力,这种学习能力决定我们能否成为技术专家、保持终身钻研。 -
我认为任何接受过良好基础教育的人都有能力掌握计算机技术,即便专业不同。因为具体学了什么专业并不重要,重要的是教育经历让你掌握了学习能力、知道要如何设立更宏大的目标、如何汇总信息、记在脑子里、进行批判性思考,如此往复。 -
在实际工作中,我强调“协作”是日常工作的核心。 -
对于招聘,我更关心候选人是否具备在大学里培养的学习能力,而不仅仅是特定的语言或技术。 -
技术的变化一刻不停,永远别指望自己毕业之后头一年学到的东西够用一辈子。 -
但保守并不代表守旧,研究人员还是在努力把成果整合起来,打造出能让消费者们眼前一亮的产品。就像那个有趣的比喻,如果你看到一只熊在跳舞,那最重要的就是它能跳舞,而不是它跳得好不好。希望大家能用类似的心态看待前沿技术,尽量宽容一点。 -
AI 可以接管一些繁琐的任务,这使得开发者可以更专注于他们真正擅长的工作,如获取和整合信息、做出决策和规划。 -
人需要肩负起监管的职责。请记住,AI 只是辅助、是帮助我们的工具。它们是在帮我们做预测,而不是替我们做预测,责任永远要由人来承担。
本文由 mdnice 多平台发布