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 字

ARTS Week 7

Algorithm 本周的算法题为 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 实现代码如下: if (strs[0] == "") { return "" } if (strs.length == 1) { return strs[0] } for (let i = 0; i < strs.length; i++) { for (let j = 0; j < strs.length - i - 1; j++) { if (strs[j].length > strs[j + 1].length) { let temp = strs[j] strs[j] = strs[j + 1] strs[j + 1] = temp } } } let minStr = strs[0] for (let i = 0; i < minStr.length; i++) { const minStrValue = minStr[i]; for (let j = 1; j < strs.length; j++) { if (strs[j][i] !== minStrValue) { return minStr.substring(0, i) } } } return minStr 解题思路: 总的来说就是,先将字符串数组排序,拿到最短的字符串,通过遍历这个最短的字符串,依次对比其他字符串相同下标的字符,是否相等,拿到出现不相等的下标,然后截取这个最短字符串的前缀即是我们要求的值。 首先,如果字符串数组是[""],直接返回结果为""。 如果字符串数组只有一个元素,就返回元素自身。 使用冒泡排序,将字符串数组,长度最短的字符串放在前面,获取最短字符串的值。 遍历最短字符串,依次对比其他字符串的相同下标的字符,是否相等,如果不相等,就返回存在不相等的下标,比如[ 'flow', 'flower', 'flight' ],通过flow来遍历,然后会在o也就是下标为2时,出现不相等,此时就截取最短字符串的值,minStr.substring(0, i),最长公共前缀。 题外话,前面的if是在力扣提交解法,反馈之后补上的,有点写测试用例的意思,当时我也在想,能不能有一个完美的解法,但是,仔细一想,直接根据特殊场景,给出直接的结果,虽然会觉得代码有点难看,但结果本身就是提高算法效率的事情,所以就这样了。一开始这道题目没有一点思路的,反复研究,才想到解法。不管解法好坏,当下的目的是解得出来,思路最重要,等积累到一定程度,自己能力有所长进,相信给出的解法一定会越来越优雅。 Review Stop Telling People Everything. My experience | by Oyinade | Oct, 2023 | Medium 你知道,当人们说不要透露下一步或者自己的计划给别人,不要告诉别人任何事情。在某种程度上,我一直觉得这句话很难理解,因为你不告诉别人你的情况,别人怎么能帮到你呢?我想说的是,没有人天生就是一座孤岛,在你生命的某个时刻,你需要和别人有交集。你需要别人帮助你,指导你,给你指路。 让我用自己来举例子,在三年前,当我还在读大学的时候,我接到了一个很小的项目,我决定测试一下这句话,看看我最后的表现如何,所以我没有告诉任何人关于这个项目。 当然,我对这个项目做了研究,我还上网寻求指导,我很有信心它会成为一个非常棒的项目。 我要展示作品的那一天到来了,当我起身开始展示时,我的很多朋友,甚至我周围的人,都有点震惊地发现,我被交给了这个项目,却没有提起任何事情,因为这是一个相当大的交易。 我能听到有人说,“她为什么不告诉我们”的窃窃私语,但木已成舟,我现在要展示它。当我开始我的演讲时,我没有足够的信心来讲好,我的肢体语言传达了一个完全不同的信息,我匆忙做了所有的事情,一个本应该花45分钟简单而清晰的解释的演讲,在15分钟内就完成了。 ...

2023-11-30 · 1 分钟 · 213 字

ARTS Week 6

Algorithm 本周的算法题为 9. 回文数 给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 例如,121 是回文,而 123 不是。 示例 1: 输入:x = 121 输出:true 实现代码如下: var isPalindrome = function (x) { let turnX = '' let strX = String(x) for (let i = strX.length - 1; i >= 0; i--) { turnX = turnX + strX[i] } return Number(turnX) == x } 解题思路: 首先,将整数转化为字符串,然后for遍历,倒序输出,组合成翻转的字符串 将翻转后的字符串转换成整数和原始整数比较,如果相等,则为true,反之为false。 上面这个是很直观的一种解法,其实自己想过另一种解法,就是双指针,左右逐步向中间执行对比,只要有一个不相等则为false,否则就是true。 Review Bacteria Memories - ESL Lesson Plan - Breaking News English Lesson 细菌在其单细胞形式中具有一种机制,可以存储记忆并将其传递给后代。 细菌没有大脑,但它们可以从环境中收集信息,如果它们经常遇到这种环境,它们可以存储它,并在以后快速访问它,以造福它们。 细菌的记忆与人类不同。它可能更类似于我们的肌肉记忆。我们的身体组织对下一步该做什么有一种感觉,因为以前已经重复了很多次。 铁不仅对地球生命的起源至关重要,而且对生命的进化也至关重要。细胞利用它是有道理的。 我们对细菌行为了解得越多,就越容易对抗它们。 Tip 掘金小册子《你不知道的 Chrome 调试技巧》是免费的,里面主要是讲了一些Chrome DevTools的使用技巧,今天看完,主要是记录了下一些印象比较深的点: 全屏截图,通过 Capture full size screenshot 命令。 取色器,Chrome DevTools 自带取色器,之前一直没注意。 console.table() 可以将对象或数组以一个表格方式打印出来,方便查看。 console.log({value1,value2,value3}) 当想打印多个值时,要区分总是要加上前缀,如value1---,其实通过{}就可以以对象的格式打印出来。 console.log()并没有立即拍摄对象快照,它只是存储一个指向对象的引用,在代码返回事件队列时才去拍摄快照。 使用 JSON.stringify() 方法处理打印的结果。 Share 很多事情不能太急着下结论,要缓一缓,不能自己认为是什么样的,就笃定事实就是这样的,要慢一点,不能依据情绪判断事情,这样很容易出问题,话一旦说出口,就很难改变了,没有调查就没有发言权,任何凭感觉而做的判断,都是在给自己设下陷阱。 谁身上多少都有些问题,用人要用其长处。

2023-11-27 · 1 分钟 · 108 字

ARTS Week 5

Algorithm 本周的算法题为 11. 盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 **说明:**你不能倾斜容器。 输入:[1,8,6,2,5,4,8,3,7] 输出:49 解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。 实现代码如下: var maxArea = function (height) { let left = 0; let right = height.length - 1; let area = 0; while (left < right) { let currentArea = Math.min(height[left], height[right]) * (right - left); area = Math.max(area, currentArea); if (height[left] < height[right]) { left++; } else { right--; } } return area; }; 解题思路: 定义两个指针left和right,分别指向容器的左边界和右边界。 定义一个变量area用于存储最大面积的结果,初始值为0。 使用一个循环,当left小于right时进行迭代:计算当前的面积,即min(height[left], height[right]) * (right - left)。Math.min()返回传入参数中最小值。 如果当前面积大于area,则更新area的值。 如果height[left]小于height[right],则将left右移一位;否则将right左移一位。 循环结束后,返回area作为最大面积的结果。 Review Napoleon’s Hat - ESL Lesson Plan - Breaking News English Lesson 拿破仑的帽子是拍卖史上最贵的,以210万美元的价格售出。 拿破仑大约有120顶帽子,本周这顶破记录的帽子由毛毡制成,上面有法国国旗的红、白、蓝三种颜色。 最近有好莱坞电影《拿破仑》上映,由雷德利·斯科特执导,华金·菲尼克斯饰演拿破仑,凡妮莎·柯比饰演约瑟芬。 Tip 项目中有些接口,请求的资源大小有200KB之多,在前端页面交互使用上体验很差,而这些资源通常都不会改变,频繁去请求作用不大,徒增服务器负担。为了解决这个问题,引入HTTP 304 状态码机制,当浏览器发起一个条件请求到服务器时,服务器会使用304状态码来表示请求资源未更新,可以直接使用当前缓存的资源,无需再重新从服务器下载。 ...

2023-11-25 · 1 分钟 · 152 字

ARTS Week 4

Algorithm 本周的算法题为 283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0] 实现代码如下: var moveZeroes = function(nums) { // 记录数组中存在0的个数 let count = 0 // 使用递归的方式,遍历删除数组中的0,并且记录数组中出现0的次数。 deleteZeroes(nums) function deleteZeroes(nums) { for (let i = 0; i < nums.length; i++) { if (nums[i] == 0) { nums.splice(i, 1) count++ return deleteZeroes(nums) } } return nums } // 根据数组中出现0的次数,将删除全部0后的数据,在尾部添加count次0元素。 for (let i = 0; i < count; i++) { nums.push(0) } return nums }; 解题思路: 首先,先找到数组中0的位置,然后依次将其从数组中删除,并记录出现0的次数。 根据0出现的次数,在数据尾部加上0。 Review Your Life Is Built By What You Do After Your Work Hours | by Anjishnu Ray | Medium 你的工作会给你的人生带来价值,但不会很多,特别是你还很年轻的时候,你的人生是由你下班后的空闲时间决定的。 我们通常工作6~8个小时,除去睡觉的时间,仍然还有8个小时的空闲时间。这些时间足够让你用来创造更有可能性的未来。 成功人士总是会选择艰难的道路,首先你要在脑海中想象自己就是一位成功人士,然后在现实中,也这样认为。在这些下班后的空闲时间里,你是选择去Netflix网站看电影,还是用来打磨你的技能,你是得过且过,还是为你的将来制定周详的计划?成功人士总是选择艰难的道路,因为尽管很困难,但它是有价值的。 成功人士总是优先考虑成就而不是舒适度。这是他们的生活方式。他们每天如此,最终使他成为现实中的成功人士。 当你工作的时候,你就是在工作,你是在成长,在进步,在完成项目,这没有错。但是你是否想过利用你的空闲时间来打磨你的技能,实验和尝试新的事物?如果这些努力给你带来好处,你会后悔吗?肯定不会,但是如果你浪费你的空闲时间在肤浅的事情和盲目的娱乐上,肯定会让你后悔。不是说现在,而是在未来的某个时刻。 休息能够恢复你的精力,放松能让你感到舒适。我们是人,当然需要休息,我们需要恢复精力和适当放松。这些都是必需品。但是安逸?我们为什么觉得安逸是一个必需品呢?它不是必需的,不应该成为一个必选项。 就像那些成功人士说的那样,最好的潜力往往能在人们的坟墓中找到。这是因为直到他们死去,他们都没有在梦想中投入足够的努力和精力。 青春是用来燃烧的,而不是用来消磨的。把这句话印到你的脑海之中吧。 当人们老去之时,唯一的希望就是还能够拥有更多的时间。不,这不可能。当你变老之时,你是为自己的一生感到自豪,还是后悔不已呢? 你不会活上一千年。 ...

2023-11-12 · 1 分钟 · 129 字