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 字

2023-12-28 运动记录

饮食 早餐: 炒河粉、瘦肉粥、烧麦、鸡蛋 午餐: 扣肉蒸饭 晚餐: 公司食堂、大桶珍珠奶茶 无氧 无 有氧 总结 昨晚很晚才去,外面有点冷的,不过值得,还是运动的感觉好。还是好好像之前那样,每天一小时吧,真的运动和不运动,差太多太多了。

2023-12-28 · 1 分钟 · 12 字

ARTS Week 9

Algorithm 本周的算法题为 1550. 存在连续三个奇数的数组 给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false 。 示例 1: 输入:arr = [2,6,4,1] 输出:false 解释:不存在连续三个元素都是奇数的情况 实现代码如下: var threeConsecutiveOdds = function (arr) { // 如果数组长度小于3,则直接返回false if (arr.length < 3) { return false } let lastIndex = arr.length - 1 for (let i = 0; i < arr.length; i++) { // 定义当前值、下一个值、再下一个值,如果存在连续的三个奇数,则可直接得到结果,返回true let current = arr[i] let next = arr[i + 1] let last = arr[i + 2] // 如果已经比较至数组倒数第三个,还是没有结果,而当i是倒数第二个时,因为只有2个值了,就没有比较的必要了,返回结果false if (i > lastIndex - 2) { return false } if (current % 2 !== 0 && next % 2 !== 0 && last % 2 !== 0) { return true } } } 解题思路: 总的来说,编辑数组,判断是否存在连续三个元素都是奇数的情况,有则返回true,否则继续遍历,不是就接着比较,等到最后倒数第三个还是没有结果,意味着不存在,返回false。 Review Peach fuzz is colour of the year for 2024 官方宣布,柔和桃(Peach fuzz)是2024年的年度流行色。世界色彩权威机构潘通(Pantone)将柔和桃选为2024年最能给人们带来舒适的色调。Pantone是有关配色方案的信息和建议的首选来源。它从2000年开始评选年度颜色。对即将到来的年度色调的审议小组表示:“柔和桃能带来归属感,并激发人们重新调整和追求成长的机会。”它补充说,在柔和桃中,“我们可以从内心寻找平静,这会对我们的幸福产生积极的影响。”潘通色彩研究所(Pantone Colour Institute)副总裁劳里•普雷斯曼(Laurie Pressman)表示,这种颜色“温馨的感觉能够把人们聚在一起,并丰富我们的灵魂”。 潘通配色系统是所有颜色的行业标准。到2024年,从平面设计到时尚,再到科技,各行各业都有可能将柔和桃融入他们的产品、营销和广告中。该公司的网站称:“潘通提供了一种通用的色彩语言,使品牌和制造商在工作流程的每个阶段都能做出对色彩至关重要的决定。”它补充道:“潘通的色彩语言支持所有注重色彩的行业,比如纺织品、服装、美容、室内设计、建筑和工业设计等,其中印刷、纺织品、塑料、颜料和涂料等多种材料已有超过10000种颜色标准。” Tip 解决 android gradle 下载特别慢的问题 在flutter/android开发时,经常遇到gradle下载特别慢的问题,甚至是超时失败,严重影响到项目的开发工作,为了解决这个问题,可以考虑替换成国内的镜像来下载解决。首先,在android/gradle/wrapper/gradle-wrapper.properties中,查看当前gradle版本,如下所示: 然后在腾讯镜像gradle上面,查看是否存在该版本,如下所示: ...

2023-12-25 · 1 分钟 · 133 字

ARTS Week 8

Algorithm 本周的算法题为 20. 有效的括号 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左括号。 示例 1: 输入:s = "()" 输出:true 示例 2: 输入:s = "(]" 输出:false 实现代码如下: var isValid = function(str) { if (str.length % 2 !== 0) { return false } const map = { '(': ')', '[': ']', '{': '}' } let stack = [] for (let i = 0; i < str.length; i++) { const s = str[i] if (s == '(' || s == '[' || s == '{') { stack.push(s) } else { if (s !== map[stack.pop()]) { return false } } } return stack.length == 0 }; 解题思路: 总的来说,就是通过栈后进先出(LIFO ,Last In First Out)的机制实现。 如果字符串长度不是偶数,则说明不是成对的,可直接返回false 通过Map,创建一个对象,用来处理左右括号映射关系 创建一个数组stack,用来实现栈的操作 如果是左括号,则入栈stack.push(s) 如果是右括号,stack.pop() 栈顶的左括号出栈,获取它映射的右括号,进行比较 如果不相等,直接返回false。 当stack长度为空,说明入栈的左括号都找到了对应的右括号,返回true,否则为false。 Review Argentina’s president warns of economic ‘shock treatment’ 阿根廷有了一位新总统。他叫哈维尔·米莱。他出人意料地赢得了11月的选举。米莱承诺要扭转阿根廷糟糕的经济。他特别表示,他将降低目前在140%左右的通胀率。他还希望大幅削减公共债务。在过去的几十年里,阿根廷借了很多钱。米莱开始想偿还这笔钱。在他作为总统的第一次演讲中,他说经济需要“休克疗法”来恢复。他表示,前几届政府花费太多,“没有钱了”。他警告阿根廷人,未来几年的生活将会很艰难。他说,人们将不得不生活在“紧缩”中以帮助经济。 哈维尔·米莱与阿根廷以前见过的任何政治家都不同。他是一个极右翼政治家。许多人说他很像美国前总统川普和巴西前总统博索纳罗。在米莱竞选期间,人们经常看到他拿着电锯。他想让人们知道,他将在经济方面大幅削减开支。他称自己的选举胜利是阿根廷历史的转折点,就像1989年柏林墙的倒塌一样。他承诺限制堕胎权并放宽枪支法。他也因为不相信气候变化而惹恼了环保人士。他说:“我们知道,短期内形势将会恶化,但之后我们将看到我们努力的成果。” ...

2023-12-16 · 1 分钟 · 130 字