ARTS Week 15

Algorithm 本周的算法题为 566. 重塑矩阵 在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个 m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。 给你一个由二维数组 mat 表示的 m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。 重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。 如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。 输入:mat = [[1,2],[3,4]], r = 1, c = 4 输出:[[1,2,3,4]] 实现代码如下: var matrixReshape = function (mat, r, c) { let allNums = [] for (let i = 0; i < mat.length; i++) { for (let j = 0; j < mat[i].length; j++) { allNums.push(mat[i][j]) } } if (allNums.length !== r * c) { return mat } let resultValue = [] while (allNums.length > 0) { resultValue.push(allNums.splice(0, c)) } return resultValue } 解题思路: 首先,我们可以定义一个空数组allNums来存储mat矩阵中的所有元素。然后,我们需要判断allNums的长度是否等于重塑后矩阵的行数r乘以列数c。如果不相等,说明无法进行重塑操作,直接返回原始矩阵mat。如果相等,我们可以定义一个空数组result来存储重塑后的矩阵。接下来,我们可以通过列数c的值,使用数组splice(startIndex, endIndex)方法对allNums进行截取,直到allNums的长度为0。在每次截取后,将截取的部分作为一行加入resultValue数组中。完成截取后,我们可以返回resultValue作为重塑后的矩阵。一开始没看完题目描述最后一句,导致解题出现偏差。本来很简单的题目,自己想复杂了。 Review World will see first trillionaire in next 10 years 一首著名的歌曲和一个问答节目问道:“谁想成为百万富翁?”几十年来,拥有一百万美元是超级富豪的目标。现在,目标变成了十亿美元。反贫困慈善机构乐施会刚刚发布了一份报告,称未来十年内世界将诞生第一个万亿富翁。一万亿是一个巨大的数字和难以置信的金额。它由1后面跟着12个0组成。一万亿等于一百万个一百万美元。该慈善机构表示,贫富差距正在扩大,并指出自新冠疫情爆发以来这种差距已经“被加速”。报告还说:“我们将在未来十年内产生一个万亿富翁,而要消除贫困,则需要200多年。” 乐施会在世界经济论坛的年度会议上谈到了不平等问题。作为例子,它表示自2020年以来全球最富有的五个人的财富增长了114% 。该慈善机构发言人说:“前五位亿万富翁们的财富增加了两倍。另一方面,近50亿人变得更穷。”特斯拉CEO埃隆·马斯克是地球上最富有的人。他个人身价接近2500亿美元。AP新闻社称:“如果某人真正达到那个万亿元里程碑,他或她将与油气资源丰厚的沙特阿拉伯具有相同价值。”乐施会表示现在世界正处于“分裂之初”,呼吁开启“公共行动新时代”以缩小财富差距。 注:作为快船队小卡球迷,不得不说,这两年快船老板鲍尔默确实赚麻了。 Tip 使用npm install package@latest 时,安装的是V1.6.0还是V1.6.1-beta ? ...

2024-01-22 · 1 分钟 · 140 字

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 字