ARTS Week 37

Algorithm

本周的算法题为 1232. 缀点成线

给定一个数组 coordinates ,其中 coordinates[i] = [x, y][x, y] 表示横坐标为 x、纵坐标为 y 的点。请你来判断,这些点是否在该坐标系中属于同一条直线上。

alt
示例 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图片,所以需要研究下如何实现动态配置颜色,好解决后续各项目不同主题的需求。

transformtranslateX(-80px);
filterdrop-shadow(#a80f0f 80px 0);

Share

《独家专访亚马逊 CTO Werner Vogels | InfoQ》

  1. 各种商业机构和教育平台都能帮我们快速掌握新的编程语言,所以到底选择哪种语言本身已经不那么重要了。
  2. 由于技术发展太过迅速,高等教育、大学课程根本就跟不上变化。问问那些刚刚走出校园的学生就知道了,他们对区块链、生成式 AI 等新技术的了解肯定不如我们这些从业者。而且随着技术的采用周期越来越短,产品的上市速度也会远超以往。也就是说,学校里传授的知识不再具有先进性。所以除了编程语言之外,我们在学校中的最大收获就是学习能力,这种学习能力决定我们能否成为技术专家、保持终身钻研。
  3. 我认为任何接受过良好基础教育的人都有能力掌握计算机技术,即便专业不同。因为具体学了什么专业并不重要,重要的是教育经历让你掌握了学习能力、知道要如何设立更宏大的目标、如何汇总信息、记在脑子里、进行批判性思考,如此往复。
  4. 在实际工作中,我强调“协作”是日常工作的核心。
  5. 对于招聘,我更关心候选人是否具备在大学里培养的学习能力,而不仅仅是特定的语言或技术。
  6. 技术的变化一刻不停,永远别指望自己毕业之后头一年学到的东西够用一辈子。
  7. 但保守并不代表守旧,研究人员还是在努力把成果整合起来,打造出能让消费者们眼前一亮的产品。就像那个有趣的比喻,如果你看到一只熊在跳舞,那最重要的就是它能跳舞,而不是它跳得好不好。希望大家能用类似的心态看待前沿技术,尽量宽容一点。
  8. AI 可以接管一些繁琐的任务,这使得开发者可以更专注于他们真正擅长的工作,如获取和整合信息、做出决策和规划。
  9. 人需要肩负起监管的职责。请记住,AI 只是辅助、是帮助我们的工具。它们是在帮我们做预测,而不是替我们做预测,责任永远要由人来承担。

本文由 mdnice 多平台发布

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AR7_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值