ARTS Week 39

Algorithm 本周的算法题为 1346. 检查整数及其两倍数是否存在 给你一个整数数组 arr,请你检查是否存在两个整数 N 和 M,满足 N 是 M 的两倍(即,N = 2 * M)。 更正式地,检查是否存在两个下标 i 和 j 满足: i != j 0 <= i, j < arr.length arr[i] == 2 * arr[j] 示例 1: 输入:arr = [10,2,5,3] 输出:true 解释:N = 10 是 M = 5 的两倍,即 10 = 2 * 5 。 实现代码如下: const checkIfExist = function (arr) { const result = arr.map((m, i) => { const index = arr.indexOf(m * 2) return index != -1 && index != i }) return result.includes(true) }; 解题思路: 把整数数组中的每个整数都乘以2,然后验证其值是否和数组中油相等的存在,如果存在,并且它的下标并不相等(为了排除0*2=0的情况),则证明整数及其两倍数存在。 Review 18-km wide diamond layer on Mercury, says study 美国著名影星玛丽莲·梦露曾唱过一首著名的歌:“钻石是女孩最好的朋友”。比利时列日大学的科学家们相信,他们已经发掘出了数量巨大的这种宝石。在水星的地壳下可能有一个18公里宽的宝石层。离我们最近的行星邻居很可能是天上的一颗宝石。研究人员测试了大约45亿年前水星是如何形成的。这颗行星是从宇宙尘埃和气体云的旋转中演化而来的。经过数百万年的时间,尘埃被压缩成石墨,石墨的化学性质与钻石相同。两者都是碳元素的固体形式。水星上的钻石不太可能被开采出来,因为它们在地表以下约500公里处。 研究人员使用一种被称为砧压机的机器来模拟水星形成的条件。这台印刷机是用来制造人造钻石的。研究人员在石墨胶囊内混合了各种元素。其中包括硅、镁和铝。太空舱承受的压力是地球上的7万倍。它被加热到2000摄氏度的温度。首席研究员推测水星上的钻石。他说:“钻石只由碳构成,所以它们应该与我们在地球上所知道的相似……它们会像纯钻石。”科学家们相信在地球表面下有一千万亿吨钻石。专家表示,这些隐藏的宝石的价值几乎无法估量。 Tip 使用Chrome访问HTTP网站时,因为浏览器自动转为HTTPS导致访问失败,查了下网上的解决方案,如下所示: 在Chrome浏览器地址栏输入chrome://net-internals/#hsts并回车。 找到页面中的Delete domain security policies部分。 输入导致问题的网站域名。 点击Delete按钮删除该域名的安全策略。 Share 前些天,早上过来公司,打开菜鸟教程网站,看了下正则表达式的内容,然后看了“关于我们”一栏,里面有句话说得蛮好的:“我们坚持一件事情,并不是因为这样做了会有效果,而是坚信,这样做是对的。” ...

2024-09-18 · 1 分钟 · 112 字

ARTS Week 38

Algorithm 本周的算法题为 2432. 处理用时最长的那个任务的员工 共有 n 位员工,每位员工都有一个从 0 到 n - 1 的唯一 id 。 给你一个二维整数数组 logs ,其中 logs[i] = [idi, leaveTimei] : idi 是处理第 i 个任务的员工的 id ,且 leaveTimei 是员工完成第 i 个任务的时刻。所有 leaveTimei 的值都是 唯一 的。 注意,第 i 个任务在第 (i - 1) 个任务结束后立即开始,且第 0 个任务从时刻 0 开始。 返回处理用时最长的那个任务的员工的 id 。如果存在两个或多个员工同时满足,则返回几人中 最小 的 id 。 示例 1: 输入:n = 10, logs = [[0,3],[2,5],[0,9],[1,15]] 输出:1 解释: 任务 0 于时刻 0 开始,且在时刻 3 结束,共计 3 个单位时间。 任务 1 于时刻 3 开始,且在时刻 5 结束,共计 2 个单位时间。 任务 2 于时刻 5 开始,且在时刻 9 结束,共计 4 个单位时间。 任务 3 于时刻 9 开始,且在时刻 15 结束,共计 6 个单位时间。 时间最长的任务是任务 3 ,而 id 为 1 的员工是处理此任务的员工,所以返回 1 。 实现代码如下: const hardestWorker = function (n, logs) { let longestDuration = logs[0][1]; let employeeDurationDifferences = [[logs[0][0], logs[0][1]]]; logs.forEach((log, index) => { if (index >= logs.length - 1) { return; } const currentTimeDiff = logs[index + 1][1] - logs[index][1]; employeeDurationDifferences.push([logs[index + 1][0], currentTimeDiff]); longestDuration = Math.max(longestDuration, currentTimeDiff); }); const longestDurationEmployees = employeeDurationDifferences.filter(diff => diff[1] === longestDuration); // 如果只存在一个员工是这个任务时长,则直接返回该员工的ID if (longestDurationEmployees.length == 1) { return longestDurationEmployees[0][0] } let longestDurationEmployeeIds = []; longestDurationEmployees.forEach(record => { longestDurationEmployeeIds.push(record[0]); }); return Math.min(...longestDurationEmployeeIds); } 解题思路: ...

2024-09-13 · 2 分钟 · 216 字

ARTS Week 37

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) 作为斜率是否相等的判断条件。 ...

2024-08-10 · 2 分钟 · 232 字

ARTS Week 36

Algorithm 本周的算法题为 1528. 重新排列字符串 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 示例 1: 输入:s = "codeleet", indices = [4,5,6,7,0,2,1,3] 输出:"leetcode" 解释:如上图所示,"codeleet" 重新排列后变为 "leetcode" 。 实现代码如下: const restoreString = function (s, indices) { let result = ""; for (let i = 0; i < indices.length; i++) { result += s[indices.indexOf(i)]; } return result; }; 解题思路: 题目很简单,只需要遍历indices数组,对于每个遍历到的索引i,我们取出indices[i]的值,这个值直接对应了字符串s中某个字符的索引。然后,我们根据这个索引从s中取出相应的字符,并将这些字符按照indices数组的顺序依次拼接起来,形成新的字符串。 Review Chimpanzees use medicinal plants when sick - Breaking News English Lesson 人类自史前时代起便开始使用药用植物,至今全球各地仍在使用传统草药。科学家首次发现黑猩猩也会寻找森林中的果实来为自己治病。英国牛津大学的研究人员在乌干达的布东戈中央森林保护区对黑猩猩的行为进行了研究。研究人员跟踪了一只手部受伤的黑猩猩,发现它在寻找一种蕨类植物的叶子。这种蕨类植物可能具有减轻黑猩猩手部肿胀的功效。另一只患有寄生虫感染的黑猩猩则寻找猫棘树的树皮,这有助于缓解它的病情。 研究团队表示,黑猩猩的疾病和受伤情况与它们所食用的植物的药用特性之间存在很强的相关性。研究人员测试了不属于黑猩猩正常饮食的植物提取物,发现88%的提取物具有抗菌特性,33%的提取物具有抗炎特性。研究员兼人类学家艾洛蒂·弗雷曼博士表示:“药理学研究结果表明,布东戈的黑猩猩会食用多种具有强大药用特性的植物。”她说,她的团队对灵长类动物行为的研究可能为我们在生活中更广泛地使用自然疗法铺平道路。 Tip 在Vue Next项目开发过程中,我们需要调试一些鼠标悬停才会出现的元素,比如Element Plus 里的 <el-dropdown> 组件,如要修改它下拉菜单的背景色,可使用鼠标悬停显示下拉框,然后按下快捷键 Ctrl + Shift + C 触发视图查看,再点击下拉框即可获取Class名称进行修改,如下所示: Share 每个人所要追求的东西并不一样,没必要强人所难,说过一两次就够了,平常心对待,说到底,只不过一份工作而已,承载不了太多的东西。

2024-07-07 · 1 分钟 · 92 字

ARTS Week 35

Algorithm 本周的算法题为 3114. 替换字符可以得到的最晚时间 给你一个字符串 s,表示一个 12 小时制的时间格式,其中一些数字(可能没有)被 "?" 替换。 12 小时制时间格式为 "HH:MM" ,其中 HH 的取值范围为 00 至 11,MM 的取值范围为 00 至 59。最早的时间为 00:00,最晚的时间为 11:59。 你需要将 s 中的 所有 "?" 字符替换为数字,使得结果字符串代表的时间是一个 有效 的 12 小时制时间,并且是可能的 最晚 时间。 返回结果字符串。 示例 1: 输入: s = "1?:?4" 输出: "11:54" 解释: 通过替换 "?" 字符,可以得到的最晚12小时制时间是 "11:54"。 实现代码如下: const findLatestTime = function (timeString) { let result = ""; let replacementDigits = ["1", "9", "0", "5", "9"]; for (let i = 0; i < timeString.length; i++) { let char = timeString[i]; if (char === "?") { char = replacementDigits[i]; } result += char; } let sub = result.substring(0, 2); let replacementString = ""; if (timeString[0] === "?" && Number(sub) > 11) { replacementString = "0" + timeString[1]; } if (timeString[1] === "?" && Number(sub) > 11) { replacementString = "11"; } if (replacementString) { result = result.replace(sub, replacementString); } return result; }; 解题思路: 首先,将"HH:MM"的每个时分最大取值明确,然后如果是?就替换成对应索引的数值,这样可以满足通用的情况下 ,在这个基础上,对特殊情况进行处理,然后得出想要的结果。 Review Top US doctor wants social media health warnings - Breaking News English Lesson ...

2024-07-06 · 1 分钟 · 177 字