ARTS Week 2

Algorithm 本周的算法题为 49. 字母异位词分组 - 力扣(LeetCode) 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]] 实现代码如下所示: let strs = ["eat", "tea", "tan", "ate", "nat", "bat"] var groupAnagrams = function (strs) { let sortedStrs = [] strs.forEach(str => { let sortedStr = str.split("").sort().join(""); sortedStrs.push(sortedStr) }) let categories = {} sortedStrs.forEach((str, index) => { if (categories[str]) { categories[str].push(strs[index]) } else { categories[str] = [strs[index]] } }) let result = [] for (const key in categories) { result.push(categories[key]) } return result } groupAnagrams(strs) 解题思路: 通过查看示例1的输出数组得知,相同字母但顺序可以不一样,所以我们可以考虑,将各元素重新排序,那么就可以知道哪些元素是相同的。首先,先遍历 strs 数组,使用 split("") 将字符串str分割为字符数组,然后使用 sort() 对字符数组进行排序,最后使用 join("") 将排序后的字符数组拼接为字符串。 sortedStrs 其值如下: [ 'aet', 'aet', 'ant', 'aet', 'ant', 'abt' ] 然后开始将 sortedStrs 中的元素进行分类,将相同元素归入同一个数组中,使用对象key的唯一性进行实现,遍历 sortedStrs ,将元素作为对象 categories 的key值,如果key没有存在,则生成新的key,并将元素自身添加至value数组中,如果已存在,则将元素添加至value数组中。在以下代码中,如果 sortedStrs 中有相同的元素,则加入到 categories[str] 数组中,但是因为 sortedStrs 是排序后的数据,虽然元素被排序了,但是下标 index 是不变的,所以就 push 原数组 strs 相同下标的元素。因为如下所示: ...

2023-10-29 · 1 分钟 · 209 字

ARTS Week 1

Algorithm 本周的算法题为 1. 两数之和 - 力扣(LeetCode) 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 实现代码如下所示: let nums = [2, 7, 11, 15], target = 9 var twoSum = function (nums, target) { let output = [] nums.forEach((item, i) => { nums.forEach((data, j) => { if (i !== j) { if (item + data === target) { output.push(i) output.push(j) } } }) }) output = Array.from(new Set(output)) return output }; twoSum(nums, target) 解题思路是,遍历两次 nums 数据,然后将 nums[i] 和 nums[j] 相加,如果其值等于 target ,则添加到 output 数组中,以示例1的数据举例,因为遍历两次,会出现 [0,1] 和 [1,0] 的情况,所以需要对数组去重,数组去重使用 Array.from(new Set(output)) 实现。至此,是可以实现示例1的需求了,但是如果是示例2时,就会出问题。 ...

2023-10-22 · 2 分钟 · 258 字

关于ARTS

ARTS 是陈皓在课程《左耳听风》中提出的原创概念,以周为单位,循环反复的学习活动。 Algorithm: 在 LeetCode 上做一道算法题,这一步主要是为了编程的训练和学习,如果不训练,看再多的书籍也是没有用的。 Review: 读一篇英文文章,主要是为了训练英文,英文能力不行,无法成为技术高手。 Tips: 分享一个小技术,可以总结和归纳日常生活中的知识点。 Share: 分享一个观点,为了让你建立影响力,能够输出价值观。

2023-10-08 · 1 分钟 · 12 字

问题清单:点亮个人知识地图

在工作或学习的过程中,我们会遇到各种各样的问题。这些问题之所以成为问题,是因为它们触及了我们知识的盲区。面对未知,我们需要投入更多时间和精力去学习,逐步填补这些空白,从而点亮我们的知识地图。正是基于这个原因,就有了这个《问题清单》。🔸🔹 1. HTML 1.1. <img>动态修改图片颜色 🔹 在实现el-menu动态配置菜单图标的时候,因为从字体图标替换成在线获取的.svg图片,所以需要研究下如何实现动态配置颜色,好解决后续各项目不通过主题的需求。 transform: translateX(-80px); filter: drop-shadow(#a80f0f 80px 0); 2. AI 2.1. DeepSeek满血版使用 🔹 年前使用DeepSeek还挺顺畅的,没想到过年期间突然爆火,导致流量暴涨。再加上美帝“亡我之心不死”,天天攻击,导致服务器经常繁忙,有时候重复提问20多次都没反应,实在忍不了了,只能研究其他渠道来使用深度思考(R1)功能。 经过一番查找,发现可以使用硅基流动(SiliconFlow)提供的服务。硅基流动与华为云联合推出了基于昇腾云的DeepSeek R1 & V3推理服务。使用邀请码注册:https://cloud.siliconflow.cn/i/wDEipqNd,可以赠送13块钱,足够用很久了。不过,由于这是API调用的方式,历史问答的内容无法保留,因此需要结合Cherry Studio客户端软件来使用。 当然,如果觉得麻烦,也可以考虑使用360的纳米AI搜索的慢思考模式,或者kimi的k1.5长思考模式。不过,就推理方面来说,还是觉得DeepSeek更有意思一些。 3. TypeScript 3.1. as keyof typeof Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{}'. No index signature with a parameter of type 'string' was found on type '{}'. viewValue.forEach((item: string) => { userInfoList.value.push({ label: t[locale.value][item], value: userInfoObject[item as keyof typeof userInfoObject] }) }) 4. JavaScript 4.1. Array.prototype.every() every() 方法测试一个数组内的所有元素是否都能通过指定函数的测试。它返回一个布尔值。 every()方法用来判断所有元素是否都通过制定函数的测试, 4.2. Math.floor() 、Math.ceil() 和 Math.round() 🔹 Math.floor(),向下取整,Math.floor(5.96) = 5。 Math.ceil(),向上取整,Math.ceil(5.96) = 6。 Math.round(),四舍五入,取其值的绝对值进行四舍五入,如果原数是负数,结果保持为负。比如Math.round(5.96) = 6;Math.round(-5.0001) = -5。 4.3. 简述js中 for in 与 for of 区别 4.4. js 遍历嵌套数组 4.5. Array.prototype.reduce() 🔹 reduce() 方法对数组中的每个元素按序执行一个提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。 ...

2023-03-06 · 12 分钟 · 2547 字

第十一周:学习总结

1. 前言 历时三个月的学习,让我对管理有了更为清晰的认知,以前自己是摸着石头过河,很难判断什么样的方式,或者说什么样的思路是正确的,但是,经过这段时间的学习,自己好像突然在迷雾中看见了明灯,可以看见前方的路况,仿佛看到了整个管理世界的地图,然后知道了自己处于哪个位置。 2. 角色转变 在没有学习之前,我是这样认为的,普通员工只需要做好自己手头上的工作,比如他是一位开发人员,那么他只需要按照需求完成开发任务即可,但是管理者不一样,管理者可能也会有项目的开发任务,但是他不能仅仅只是做好自己的开发工作,还需要对整个团队负责。管理者自己的工作做得很好,但是如果整个团队的成果很糟糕,那么这个管理者就是失败的。 但我也只是认识到这一层而已,如果有人问我,那么管理者要怎么对团队负责呢?用什么方式呢?估计我就回答不上来了。所以,我反思的一个心得就是,角色应该转变,但是怎么转变呢?具体应该要怎么做?是事无巨细还是发号指令?在项目早期,管理者可以带头冲锋,负责很多项目功能的开发,但在项目后期,应该要试着将有挑战性的开发任务留给其他人,帮助其成长,自己应该往更高一层维度去思考项目的问题,关注项目开发进度,项目往后发展方向等等,更加注重全局,而不是局部。 3. 双赢 不管从公司,还是个人,管理的目的,最终受益都是双赢,这是我所认为的。 从公司层面,管理是为了能让公司长久地健康生存下去;从部门层面,管理是为了让团队能够做出更好的成果;从员工层面,管理可以有效的提高员工自身的工作效率;从管理者层面,管理是为了实现管理者的心中较为自我的愿景,实现自我价值。 学习的这段时间,更让我体会到“双赢”无处不在,不管是自己所交的朋友,还是其他事情,很多都是无意识的,都是有“双赢”的东西在里面,透过这个,更让我明白的一个点就是,如果一个很喜欢为他人着想的人,喜欢帮助别人的人,他应该知道,收取别人的回报是明智的行为,且不说,是“孔子批评子贡做好事不领取奖金”那个典故的原因,更多是因为很多人在无私奉献之后,没有接受别人的称赞,他自以为自己是很高尚的,但是如果对方以后做了什么稍有不好的地方,他基本上就会以为,以前我那么对他,他原来是这样的人,真是不值得。还有一些就是朋友之间的买卖交易,一些东西可能朋友之间关系很好的,自己是可以白送的,但还是要收钱的,也是这个原因,可以收的很少,但是不能不收。在我的理解范畴内,就是打破了“双赢”的平衡导致的。 4. 大道至简 对于管理而言,光有内功和招式,没有实战去验证,那不算真正掌握。即便学以致用,有所成效,但有可能只是暂时的,学得再多的东西,人自己的品性才是最根本的,如果你内功深厚,哪怕没有招式,至少保证怎么打都打不死,对应的就是,虽然你没有掌握太多管理上面的方法,但如果知道关怀下属,以诚相待,让对方能感觉到你的诚意,那么对于整个团队而言,基本盘还是有的。但是,要上升到更高的层面,就需要科学的管理方式,也就是武功招式了。 大道至简,作为管理者,最终可能还是要回归到个人品性的修炼上面,待人接物,行为举止,都是修行。就好像学习技术一样,各种前沿框架、前沿技术满天飞,但是基础知识不扎实,到头来,很容易就变成泡沫,一吹就破。 5. 以人为本 “大道至简”是指让管理者知道回归到个人品性的修炼上面,“以人为本”是要让管理者知道你要管理的是人,是一个个有血有肉活生生的人,不是要管理团队里的那些工作,那只是表面的东西,核心其实还是人。 一方面,既然是人,那就需要知道人是怎么想的,我们不可能知道每个人的想法,但是可以把人特有的一些共性总结出来,深入去理解这些共性,那么就很好理解自己员工的一些想法,就比较好把掌控整个团队的运转。另一方面,以人为本,就需要体现出管理者对下属的关怀,就需要管理者关注下属的各个方面,而不仅仅只是工作,还要包括生活,让他可以给公司带来收益的同时,自己也能够得到成长,这就体现“双赢”的思维了。一个团队,是由一个个人组成的,任何一个环节出了问题,都会影响到整个团队。 我最近听到的很喜欢的一句话就是伦纳德说的,“我们希望球队中每个人都能成为自己角色上的赢家。” 多年以后再看这些培训作业,有些太理想化了,说到底,管理只不过是公司为了能获取到更多利益的手段罢了,不用说得那么高大上,每个人的利益诉求并不一样,你不能强求他人按你的标准去做事情,自己也不要入戏太深,只是一份工作而已,没有必要有那么多的情绪。在工作上,你想要做成一些远大的事情,如果很难,那就适当妥协就好了,可以慢慢把这口气攒起来,迟早有一天,可以有机会完全贯彻你的意志,成为你想要的样子。

2021-01-11 · 1 分钟 · 22 字