ARTS Week 14

Algorithm 本周的算法题为 1450. 在既定时间做作业的学生人数 给你两个整数数组 startTime(开始时间)和 endTime(结束时间),并指定一个整数 queryTime 作为查询时间。 已知,第 i 名学生在 startTime[i] 时开始写作业并于 endTime[i] 时完成作业。 请返回在查询时间 queryTime 时正在做作业的学生人数。形式上,返回能够使 queryTime 处于区间 [startTime[i], endTime[i]](含)的学生人数。 示例 1: 输入:startTime = [1,2,3], endTime = [3,2,7], queryTime = 4 输出:1 解释:一共有 3 名学生。 第一名学生在时间 1 开始写作业,并于时间 3 完成作业,在时间 4 没有处于做作业的状态。 第二名学生在时间 2 开始写作业,并于时间 2 完成作业,在时间 4 没有处于做作业的状态。 第三名学生在时间 3 开始写作业,预计于时间 7 完成作业,这是是唯一一名在时间 4 时正在做作业的学生。 实现代码如下: var busyStudent = function (startTime, endTime, queryTime) { let doHomeworkCount = 0 for (let i = 0; i < startTime.length; i++) { if (queryTime >= startTime[i] && queryTime <= endTime[i]) { doHomeworkCount += 1 } } return doHomeworkCount } 解题思路: ...

2024-01-18 · 1 分钟 · 171 字

ARTS Week 13

Algorithm 本周的算法题为 896. 单调数列 如果数组是单调递增或单调递减的,那么它是 单调 的。 如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。 当给定的数组 nums 是单调数组时返回 true,否则返回 false。 示例 1: 输入:nums = [1,2,2,3] 输出:true 实现代码如下: var isMonotonic = function (nums) { var isIncreasing = true var isDecreasing = true for (let i = 0; i < nums.length - 1; i++) { if (!(nums[i] <= nums[i + 1])) { isIncreasing = false break } } for (let i = 0; i < nums.length - 1; i++) { if (!(nums[i] >= nums[i + 1])) { isDecreasing = false break } } return isIncreasing || isDecreasing } 解题思路: 定义两个变量isIncreasing和isDecreasing,初始值均设为true。通过for循环遍历数列,当出现不满足从小到大的条件时,将isIncreasing设为false并跳出循环。然后继续判断是否满足从大到小的条件,如果不满足,则将isDecreasing设为false并跳出循环。最后通过逻辑与判断,只要isIncreasing或isDecreasing中有一个为true,即可确认为单调数列。 Review Muggers now targeting luxury winter coats 世界各地的城市都发生了一连串的抢劫事件,因为劫匪们都把注意力集中在一种新的物品上——奢侈的外套。最近几周,在伦敦、华盛顿和其他大都市地区,人们的外套都被持刀抢劫了。英国伯明翰一名男子的夹克被小偷偷走,他的脸被划伤。犯罪分子的目标是单价高达2200美元的大衣。除了从人们的背上偷走外套外,小偷还闯入人们的车辆。伯明翰城市大学的犯罪学家大卫·威尔逊教授警告说,这些抢劫案是一种新的“奢侈犯罪趋势”的开始。他说,盗窃事件“令人担忧”。 威尔逊教授警告那些穿着高端冬季夹克的人要小心了。他说:“我会告诉任何穿着加拿大鹅品牌夹克的人要小心,注意你周围的环境和你周围的人。”你必须警惕那些可能试图偷走它们的机会主义者。”他补充说:“窃贼过去常常以劳力士手表为目标,这些手表售价数千英镑,然后在网上出售。”伦敦交通局的一位发言人说:“加拿大鹅毛大衣是抢劫的目标。这对我们来说是一个真正的担忧,因为它确实影响了年轻人在网络上的安全。”她补充说,这种“贪婪的犯罪”是“非常令人担忧、恐吓和恐惧的”。 Tip 因项目开发计划使用Bing Maps地图替换百度地图,所以就需要考虑坐标转换的问题,否则定位会出现偏差,当前在 www.lddgo.net 上面发现有坐标系转换工具,就使用了一下,进行验证。 Bing Maps转百度地图国内地址:GCJ02 -> BD09 偏差几米左右 Bing Maps转百度地图国外地址:WGS84 -> BD09 偏差几米左右 百度地图转Bing Maps国内地址:BD09 -> GCJ02 偏差几米左右 百度地图转Bing Maps国外地址:国外坐标不需要转换,直接用 偏差几米左右 Share 慈不掌兵,因小失大。 了解了下showcase,对项目质量的提升应该很有帮助,想办法落实。

2024-01-16 · 1 分钟 · 141 字

ARTS Week 12

Algorithm 本周的算法题为 1572. 矩阵对角线元素的和 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 输入:mat = [[1,2,3], [4,5,6], [7,8,9]] 输出:25 解释:对角线的和为:1 + 5 + 9 + 3 + 7 = 25 请注意,元素 mat[1][1] = 5 只会被计算一次。 实现代码如下: var diagonalSum = function (mat) { // 设置总和值 let sumValue = 0 for (let i = 0; i < mat.length; i++) { // 遍历相加 sumValue = sumValue + mat[i][i] + mat[i][mat.length - 1 - i] } // 如果mat长度是奇数,会出现中心值相加两次的情况,所以这里要减去一次。 if (mat.length % 2 == 1) { // 获取数组中间下标值,减去1除以2加上1就是中间值,但是因为下标是0开始的,所以减去1 let coreIndex = ((mat.length - 1) / 2) + 1 - 1 sumValue = sumValue - mat[coreIndex][coreIndex] } return sumValue } 解题思路: 通过遍历二维数组,找到每个元素位置的规律即可,就是mat[i][i]和mat[i][mat.length - 1 - i],然后处理二维数组长度是偶数和奇数的情况,奇数情况下,会出现多加一次中间值的情况,减去一次即可。 Review Better weight-loss drugs predicted for 2024 最常见的新年决心之一就是减肥。由于最近批准的注射药物被证明在帮助人们减肥方面特别有效,减肥有望在2024年变得更容易实现。它们属于一类叫做GLP-1的药物。其中最著名的是Wegovy和Ozempic。据drugs.com网站报道,在对使用Wegovy药物的患者进行的广泛研究中,有83%的参与者减掉了5%或更多的体重。相比之下,只有31%的服用安慰剂的参与者能够实现相同的减重效果。梅奥诊所(Mayo Clinic)的一位心脏病专家表示,减肥药物“将继续存在”,而且“越来越多的此类药物将进入市场”。 行业专家强调了这些新疗法的重要性。著名杂志《科学》宣布,该系列减肥药将成为2023年医学界的“年度突破”。对于超重的人和那些发现锻炼困难的人来说,今年可能会更好。一种叫做Zepbound的新药物已经获得批准。在临床试验中,服用这种药物的人平均减轻了20%至25%的体重。肥胖专家朱莉安娜·西蒙内蒂医生说,这些新药“很神奇,因为它们解决了体重反弹的潜在生理原因”。她补充说:“过去十年我一直在这个领域工作,结果非常令人印象深刻。” Tip PATCH、PUT和POST方法的区别? 请求方法 作用 请求是否有主体 成功的响应是否有主体 安全 幂等 可缓存 允许在HTML表单中使用 PATCH 用于对资源进行部分修改。 是 可能有 否 是 否 不允许 PUT 创建一个新的资源或用请求的有效载荷替换目标资源的表示。 是 可能有 否 是 否 不允许 POST 发送数据给服务器。 是 是 否 否 仅在包含足够新的信息时 允许 幂等:任何数量的重复、相同的请求都会使资源处于相同的状态。 ...

2024-01-11 · 1 分钟 · 152 字

ARTS Week 11

Algorithm 本周的算法题为 867. 转置矩阵 给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。 矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。 示例 1: 输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]] 实现代码如下: var transpose = function (matrix) { var resultArr = [] for (let i = 0; i < matrix.length; i++) { for (let j = 0; j < matrix[i].length; j++) { // 如果是undefined,则赋值[] if (!resultArr[j]) { resultArr[j] = [] } resultArr[j].push(matrix[i][j]) } } return resultArr } 解题思路: 从示例1可以看出,转置前后的数据,其实是有规律可循的,所求的二维数组,其实就是转置前,每个子元素数组同下标的集合,示例1中的147分别是matrix中各子元素数组下标为0的值,以此类推,使用两个for循环得到结果。 Review Scientists ’talk’ with a whale for 20 minutes 科学家表示,他们与一头鲸鱼进行了一次“对话”。他们还表示,这种聊天可以帮助他们有朝一日与外星人交谈。这些科学家来自加州大学、阿拉斯加鲸鱼基金会和SETI(搜寻外星智慧)。这三个组织联合起来,与一头名叫吐温的座头鲸交谈。他们用“座头鲸语言”和她交谈了20分钟。他们的对话发生在科学家们向阿拉斯加海岸外的海洋发送“联系电话”之后。吐温听到了呼唤,做出了回应。她游到考察船边聊天。SETI表示,这是人类和座头鲸之间的第一次交流。 科学家们说,他们与吐温的对话并不深刻。布伦达·麦考恩教授说,这更像是一系列的问候。鲸鱼使用联络呼叫让其他鲸鱼知道它们在哪里。科学家们在20分钟内发起了36次同样的呼叫。每一次,吐温都做出了回应。她甚至匹配了研究人员每一次呼叫的间隔时间。麦考恩教授告诉《商业内幕》网站,她的研究可以让与外星人交谈变得更容易。她说:“这个星球上有各种各样的智能体。通过研究它们,我们可以更好地了解外星人可能是什么样子的,因为它们不会完全同我们一样。” Tip switch 和 if else 哪个效率高 在大多数情况下,switch 语句的效率通常比 if else 语句要高。这是因为 switch 语句使用了跳转表来查找符合条件的分支,而不是逐个比较条件。跳转表实际上是一个数组,通过将条件值作为索引,可以直接访问到对应的目标地址。因此,跳转表的查找方式具有固定的时间复杂度 O(1),无论有多少个分支,查找时间都是恒定的。 相比之下,if else 语句需要逐个比较条件,如果有多个条件,它的查找时间将随着条件数量和复杂度的增加而增加。在最坏的情况下,if else 语句的时间复杂度可能达到 O(n),其中 n 是分支的数量。 然而,在实际应用中,仍然需要根据具体的场景来选择使用 switch 还是 if else。如果条件是固定的值,且分支数量较多,建议使用 switch 语句。如果条件是动态的,并且需要进行更复杂的条件判断,建议使用 if else 语句。 ...

2024-01-04 · 1 分钟 · 115 字

ARTS Week 10

Algorithm 本周的算法题为 1534. 统计好三元组 给你一个整数数组 arr ,以及 a、b 、c 三个整数。请你统计其中好三元组的数量。 如果三元组 (arr[i], arr[j], arr[k]) 满足下列全部条件,则认为它是一个 好三元组 。 0 <= i < j < k < arr.length |arr[i] - arr[j]| <= a |arr[j] - arr[k]| <= b |arr[i] - arr[k]| <= c 其中 |x| 表示 x 的绝对值。 返回 好三元组的数量。 示例 1: 输入:arr = [3,0,1,1,9,7], a = 7, b = 2, c = 3 输出:4 解释:一共有 4 个好三元组:[(3,0,1), (3,0,1), (3,1,1), (0,1,1)] 。 实现代码如下: var countGoodTriplets = function (arr, a, b, c) { let resultCount = 0 for (let i = 0; i < arr.length; i++) { for (let j = i + 1; j < arr.length; j++) { for (let k = j + 1; k < arr.length; k++) { if (0 <= i < j < k < arr.length && Math.abs(arr[i] - arr[j]) <= a && Math.abs(arr[j] - arr[k]) <= b && Math.abs(arr[i] - arr[k]) <= c) { ++resultCount } } } } return resultCount } 解题思路: 要得到好三元组的数量,要先判断出i、j、k能有多少种组合,使用3个for来遍历,因为0 <= i < j < k < arr.length的条件,可以i从0开始,j从i+1开始,k从j+1开始,依次得出arr[i], arr[j], arr[k]存在的组合,然后使用4个条件进行判断,使用resultCount来计数即可。 ...

2023-12-31 · 1 分钟 · 185 字